42840. 모의고사

2025-11-12
프로그래머스 42840번 풀이

이 글은 Obsidian에서 마이그레이션되었으며, 그 과정에서 AI의 도움을 받았습니다. 오류나 누락된 내용이 있다면 댓글로 알려주세요!

문제

코딩테스트 연습 - 모의고사 | 프로그래머스 스쿨

풀이

아이디어

수포자들의 정답 패턴을 미리 저장해두고, 그 패턴을 반복하면서 각 수포자들의 점수를 구해 scores에 저장한다.

const scores = [0, 0, 0]; // 수포자들의 점수를 저장하는 배열

// 수포자들의 정답 패턴
const patterns = [
    [1, 2, 3, 4, 5],
    [2, 1, 2, 3, 2, 4, 2, 5],
    [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
]

// 1번 수포자부터 3번 수포자까지 정답 패턴을 확인
for (let i = 0; i < 3; i++) {
    const pattern = patterns[i];
    for (let j = 0;  j < answers.length; j++) {
        if (answers[j] === pattern[j % pattern.length]) {
            scores[i]++;
        }
    }
}

scores에 저장된 수포자들의 점수 중에서 최고 점수를 구하고, 이 점수를 받은 수포자를 찾아준다. (2명 이상이면 함께 배열에 넣어주면 됨)

// 가장 높은 점수 결정
const maxScore = Math.max(...scores);

// 가장 높은 점수를 받은 수포자 확인
const ret = [];
for (let idx = 0; idx < 3; idx++) {
    if (scores[idx] === maxScore) {
        ret.push(idx + 1);
    }
}

return ret;

시간 복잡도

  • 시간 복잡도: 이 문제에서 N은 answers 배열의 길이이다. 정답 패턴을 확인하는 부분은 O(N)의 시간 복잡도를 가지고 점수를 결정하고 최고 득점 수포자를 구하는 부분은 O(1)의 시간 복잡도를 갖는다. 최종 시간 복잡도는 O(N)