1. 문제 설명
- 수포자는 모의고사에 수학 문제를 전부 찍으려 한다.
- 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
- 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
- 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어진다.
- 가장 많은 문제를 맞힌 사람이 누군인지 배열에 담아 return
2. 제한사항
- 시험은 최대 10,000 문제로 구성되어 있다.
- 문제의 정답은 1, 2, 3, 4, 5중 하나이다.
- 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순으로 정렬
3. 입출력 예
answers | return |
[1, 2, 3, 4, 5] | [1] |
[1, 3, 2, 4, 2] | [1, 2, 3] |
- 수포자 1은 모든 문제를 맞혔습니다.
- 수포자 2, 3은 모든 문제를 틀렸습니다.
- 수포자 1, 2, 3이 각각 2문제씩 맞췄습니다.
4. 풀이 접근
- 1, 2, 3번 수포자가 어떻게 찍는지 패턴을 확인한 후 각 배열에 저장한다.
- 제한 조건에서 최대 10,000문제까지 이므로 여기까지 사이클을 만든는 것이 좋겠다.
- 정답 길이만큼 반복문들 돌려 정답 맞춘 사람의 스코어 배열에 저장한다.
- 가장 높은 점수를 받은 사람이 있을 수 있으므로 정렬하여 리턴한다.
5. 코드
def solution(answers):
one = [1,2,3,4,5] * 2000
two = [2,1,2,3,2,4,2,5] * 2000
thr = [3,3,1,1,2,2,4,4,5,5] * 2000
score = {1 : 0, 2 : 0, 3 : 0}
for i in range(len(answers)):
if(one[i] == answers[i]):
score[1] += 1
if(two[i] == answers[i]):
score[2] += 1
if(thr[i] == answers[i]):
score[3] += 1
result = sorted([key for key, value in score.items() if max(score.values()) == value])
return result
- 최대 10,000문제 이므로 2000을 곱해줬다.
- 점수를 나타낼 score 딕셔너리를 만들어줬다.
- value값이 가장 큰 순서대로 오름차순으로 정렬했다.
6. 알아둘만한 문법
result = sorted([key for key, value in score.items() if max(score.values()) == value])
- 딕셔너리에서 value값 기준으로 오름차순하기
'CodingTest > 완전 탐색(구현)' 카테고리의 다른 글
프로그래머스 (Level 2) - 카펫 (0) | 2022.08.08 |
---|---|
프로그래머스 (Level 2) - 소수 찾기 (0) | 2022.08.07 |
문자열 재정렬 (0) | 2022.07.07 |
왕실의 나이트 (0) | 2022.07.06 |
특정 문자열을 포함한 시각구하기 (0) | 2022.07.06 |