수포자는 수학을 포기한 사람을 의미하며, 세 명의 수포자가 모의고사에서 문제를 전부 찍으려고 합니다. 이들은 각기 다른 방식으로 문제를 찍습니다. 각 수포자의 찍기 패턴은 다음과 같습니다:
1번 문제부터 마지막 문제까지의 정답이 순서대로 들어있는 배열 answers
가 주어졌을 때, 가장 많은 문제를 맞힌 사람을 배열에 담아 반환하는 함수 solution
을 작성해야 합니다.
answers
: [1, 2, 3, 4, 5]
[1]
answers
: [1, 3, 2, 4, 2]
[1, 2, 3]
function solution(answers) {
// 각 수포자가 찍는 패턴을 정의합니다.
const pattern1 = [1, 2, 3, 4, 5];
const pattern2 = [2, 1, 2, 3, 2, 4, 2, 5];
const pattern3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
// 수포자별로 맞힌 문제 수를 저장할 배열을 초기화합니다.
const score = [0, 0, 0];
// 각 문제에 대해 각 수포자의 정답을 비교하여 맞힌 문제 수를 계산합니다.
for (let i = 0; i < answers.length; i++) {
if (answers[i] === pattern1[i % pattern1.length]) {
score[0]++;
}
if (answers[i] === pattern2[i % pattern2.length]) {
score[1]++;
}
if (answers[i] === pattern3[i % pattern3.length]) {
score[2]++;
}
}
// 가장 높은 점수를 찾습니다.
const maxScore = Math.max(...score);
// 가장 높은 점수를 받은 수포자를 배열에 담아 반환합니다.
const result = [];
for (let i = 0; i < score.length; i++) {
if (score[i] === maxScore) {
result.push(i + 1);
}
}
return result;
}
// 입출력 예시 테스트
console.log(solution([1, 2, 3, 4, 5])); // 출력: [1]
console.log(solution([1, 3, 2, 4, 2])); // 출력: [1, 2, 3]
알고리즘 코딩 테스트의 관점에서 평가하면 다음과 같습니다:
최종적으로, 개선된 코드는 다음과 같습니다:
function solution(answers) {
// 각 수포자가 찍는 패턴을 정의합니다.
const pattern1 = [1, 2, 3, 4, 5];
const pattern2 = [2, 1, 2, 3, 2, 4, 2, 5];
const pattern3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
// 수포자별로 맞힌 문제 수를 저장할 배열을 초기화합니다.
const score = [0, 0, 0];
// 각 문제에 대해 각 수포자의 정답을 비교하여 맞힌 문제 수를 계산합니다.
for (let i = 0; i < answers.length; i++) {
if (answers[i] === pattern1[i % pattern1.length]) {
score[0]++;
}
if (answers[i] === pattern2[i % pattern2.length]) {
score[1]++;
}
if (answers[i] === pattern3[i % pattern3.length]) {
score[2]++;
}
}
// 가장 높은 점수를 찾습니다.
const maxScore = Math.max(...score);
// 가장 높은 점수를 받은 수포자를 배열에 담아 반환합니다.
const result = [];
for (let i = 0; i < score.length; i++) {
if (score[i] === maxScore) {
result.push(i + 1);
}
}
return result;
}
// 입출력 예시 테스트
console.log(solution([1, 2, 3, 4, 5])); // 출력: [1]
console.log(solution([1, 3, 2, 4, 2])); // 출력: [1, 2, 3]
이 코드는 주어진 문제를 올바르게 해결하며, 알고리즘 코딩 테스트의 관점에서도 적절한 풀이입니다.