https://programmers.co.kr/learn/courses/30/lessons/42840
이 문제는 오랜만에 쉬운 문제였다.
무척 쉽다고 느껴서 급하게 후다닥 풀고 제출했는데 서너번 실패가 떠서 조금 당황하기도 했으나 금방 통과했다.
풀이과정:
1. 수포자1, 수포자2, 수포자3 이 찍는 패턴이 모두 다르므로 (정확히는 횟수가 다르므로) 모든 수포자의 찍는 횟수를 동일하게 맞춰주기 위해 최소 공통 배수인 40으로 맞춰주었다.
2. 답안을 순회하면서 각 정답자의 스코어를 증가시킨다.
3. 수포자의 점수의 최대치가 첫번째 수포자의 점수와 같다면 첫번째 수포자는 최대 점수를 맞았으므로 결과에 추가한다.
4. 수포자의 점수의 최대치가 두번째 수포자의 점수와 같다면 두번째 수포자는 최대 점수를 맞았으므로 결과에 추가한다.
-> 첫번째 수포자와 동점이라는 뜻이다.
5. 수포자의 점수의 최대치가 세번째 수포자의 점수와 같다면 세번째 수포자는 최대 점수를 맞았으므로 결과에 추가한다.
-> 첫번째, 두번째 수포자와 동점이라는 뜻이다.
def solution(answers):
st = [1, 2, 3, 4, 5] * 8
nd = [2, 1, 2, 3, 2, 4, 2, 5] * 5
rd = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] * 4
pick_index = 0
st_score = 0
nd_score = 0
rd_score = 0
for i, a in enumerate(answers):
if a == st[pick_index]:
st_score += 1
if a == nd[pick_index]:
nd_score += 1
if a == rd[pick_index]:
rd_score += 1
if pick_index == 39:
pick_index = 0
else:
pick_index += 1
answer = []
if max(st_score, nd_score, rd_score) == st_score:
answer.append(1)
if max(st_score, nd_score, rd_score) == nd_score:
answer.append(2)
if max(st_score, nd_score, rd_score) == rd_score:
answer.append(3)
return answer