코딩테스트 관련 면접 준비용 자료
코딩테스트 관련 면접 준비용 자료
위의 목차를 클릭하면 해당 글로 자동 이동 합니다.
1. for, foreach 차이 파악
아래와 같은 점수가 주어질 때 1,3,5 번 답을 선택한 사람중 max score 구하기
1-1. for 문으로 구하기
const arr2 = [
{ answer: 1, score: 3 },
{ answer: 3, score: 4 },
{ answer: 5, score: 5 },
];
function highestScore(arr) {
const scores = {
a: 0,
b: 0,
c: 0,
};
//for 문으로
for (let i = 0; i < arr.length; i++) {
const score = arr[i];
const answer = score.answer;
const scoreNum = score.score;
if (answer === 1) {
scores.a += scoreNum;
} else if (answer === 3) {
scores.b += scoreNum;
} else if (answer === 5) {
scores.c += scoreNum;
}
}
//a,b,c에 해당하는 가장 높은 score 까지 구함
let result = '';
const maxScore = Math.max(scores.a, scores.b, scores.c);
console.log(maxScore);
//가장 높은 score를 가진 응시자 반환
for (const key in scores) {
if (scores[key] === maxScore) {
if (result !== '') {
result += ',';
}
result += `${key}:${maxScore}`;
}
}
return result;
}
const result = highestScore(arr2);
console.log(result);
1-2. foreach 문으로 구하기
const arr1 = [
{ answer: 1, score: 5 },
{ answer: 3, score: 3 },
{ answer: 2, score: 4 },
];
const arr2 = [
{ answer: 1, score: 3 },
{ answer: 3, score: 4 },
{ answer: 5, score: 4 },
];
function highestScore(arr) {
const scores = {
a: 0,
b: 0,
c: 0,
};
arr.forEach((obj) => {
//answer, score 로 이루어진 arr 에서
const answer = obj.answer;
const score = obj.score;
//배열에서 1,3,5 에 해당하는 score 책성하고 a,b,c 응시자에게 할당
if (answer === 1) {
scores.a += score;
} else if (answer === 3) {
scores.b += score;
} else if (answer === 5) {
scores.c += score;
}
});
//가장 높은 score 까지 구함
let result = '';
const maxScore = Math.max(scores.a, scores.b, scores.c);
console.log(maxScore);
//가장 높은 score를 가진 응시자 반환
for (const key in scores) {
if (scores[key] === maxScore) {
if (result !== '') {
result += ',';
}
result += `${key}:${maxScore}`;
}
}
return result;
}
const result = highestScore(arr2);
console.log(result);
✔ for 문과 foreach의 차이
1. 동기와 비동기: for문은 동기방식 이기 때문에 오류가 나면 오류가 난 위치 이후의 작업이 동작하지 않음
2. 성능차이: forEach문은 '향상된 for문'이라고 칭하는데, 그 이유는 가변적인 배열이나 리스트 크기를 구할 필요가 없어 복잡한 반복문에 적합하며, 인덱스를 생성하여 접근하는 for문보다 수행속도가 빠르다.
3. 간결한 코드: foreach문은 코드를 간결하게 작성할 수 있고 콜백 함수를 활용하여 반복되는 코드를 모듈화 할 수 있다.
✔ foreach 문의 단점
1. 반복문 내에서 배열이나 리스트 값을 변경하거나 추가할 수 없다.
ex) for 문에서는 배열의 특정 인덱스에 접근하여 조작할 수 있다.
2. 중간에 반복을 중단할 수 없으며 건너 뛸 수 없다.
2. 배열내의 숫자들로 이루어진 최소공배수의 총합 구하기
방법: 가장 먼저 최소공배수를 구하기 위한 최대공약수를 계산한다. 도출된 최대공약수를 통해 최소공배수를 계산하는 함수를 만든다. ==> arr를 for문으로 돌며 처리한다.
//최대공약수 구하기 *GCD = Greatest Common Divisor
getGCD(a,b)
function getGCD(a, b) {
if (b === 0) {
return a;
} else {
return getGCD(b, a % b);
}
}
b가 0일 때는 더이상 나눌 수 있는 수가 없다는 의미이므로 a가 최대공약수가 된다. 따라서 a를 반환.
만약 a,b가 2,14라고 가정한다면 14, 2%14 의 작업을 b가 0이 될때까지 수행함으로써 최종적으로 최대공약수인 a를 반환한다.
//최소공배수 구하기 *LCM = Least Common Multiple
getLCM(a,b)
최소공배수는 그 수들의 곱을 최대공약수로 나누어주는 방식으로 구한다. 따라서 위에서 구현한 최대공약수 함수를 넣어줌.
function getLCM(a, b) {
return (a * b) / getGCD(a, b);
}
//최종 코드
function getGCD(a, b) {
if (b === 0) {
return a;
} else {
return getGCD(b, a % b);
}
}
function getLCM(a, b) {
return (a * b) / getGCD(a, b);
}
const arr = [1, 2, 3]; //2,6,3
const arr2 = [4, 5, 6]; //20,12,30
function solution(arr) {
let totalLCM = 0;
for (let i = 0; i < 3; i++) {
for (let j = i + 1; j < 3; j++) {
const lcm = getLCM(arr[i], arr[j]);
console.log(lcm);
totalLCM += lcm;
}
}
return totalLCM;
}
const result = solution(arr2);
console.log(result);
3. 배열내의 숫자들 중 소수만 찾아서 총합 구하기
const a = 5;
const b = 7; //2,3,5,7
function isPrime(num) {
if (num === 1) return false;
for (let i = 2; i <= parseInt(Math.sqrt(num)); i++) {
if (num % i === 0) return false;
}
return true;
}
console.log(isPrime(5));
function sumOfprimes(a) {
let sum = 0;
for (let i = 2; i <= a; i++) {
if (isPrime(i)) {
sum += i;
}
}
return sum;
}
console.log(sumOfprimes(a));
'개발 > 알고리즘 풀기' 카테고리의 다른 글
[백준 알고리즘] 10807 개수세기 Javascript 풀이 (0) | 2023.10.27 |
---|---|
[백준 알고리즘] 2884 알람시계 Javascript 풀이 (0) | 2023.10.24 |
[정렬알고리즘] 퀵정렬 Node.js 예제 (1) | 2023.09.28 |
TIL 230413 테스트_지뢰찾기 맵 만들기 (0) | 2023.04.13 |
TIL 230412 _소수찾기, 실패율, 체육복, 최대공약수와 최소공배수, K번째 수, 나머지가 1이 되는 수 찾기, 폰켓몬 (0) | 2023.04.13 |