## 🌟 문제 [코딩테스트 연습 - 모의고사 \| 프로그래머스 스쿨](https://school.programmers.co.kr/learn/courses/30/lessons/42840) 정해진 패턴으로 정답을 찍는 수포자들 중에서 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아서 return 하기 ## 🌟 풀이 수포자들의 정답 패턴을 미리 저장해두고, 그 패턴을 반복하면서 각 수포자들의 점수를 구해 scores에 저장한다. ```javascript 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명 이상이면 함께 배열에 넣어주면 됨) ```javascript // 가장 높은 점수 결정 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)