이 글은 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)
end