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)