문제를 정리해보자.
수포자 1, 2, 3 모두는 규칙적으로 정답을 찍는다.
실제 정답이 들어있는 배열과 수포자들의 정답을 비교해서
정답을 가장 많이 맞힌 수포자를 찾으면 된다. (1명 이상이다.)
from collections import deque
def solution(answers):
l = len(answers)
su_1 = deque([1, 2, 3, 4, 5]) # 5
su_2 = deque([2, 1, 2, 3, 2, 4, 2, 5]) # 8
su_3 = deque([3, 3, 1, 1, 2, 2, 4, 4, 5, 5]) # 10
result = [0, 0, 0]
# 정답 비교
for num in answers:
if num == su_1[0]:
result[0] += 1
if num == su_2[0]:
result[1] += 1
if num == su_3[0]:
result[2] += 1
su_1.append(su_1.popleft())
su_2.append(su_2.popleft())
su_3.append(su_3.popleft())
tmp = 0
answer = []
# 고득점 수포자 찾기
for idx, val in enumerate(result):
if tmp < val:
tmp = val
answer = [idx + 1]
elif tmp == val:
answer.append(idx + 1)
return answer
print(solution([1,3,2,4,2]))
수포자들은 정답 표기를 규칙적으로 했다. 그래서 정답 리스트를 queue 형태로 구현했다.
다른 사람 풀이를 보자.
def solution(answers):
pattern1 = [1,2,3,4,5]
pattern2 = [2,1,2,3,2,4,2,5]
pattern3 = [3,3,1,1,2,2,4,4,5,5]
score = [0, 0, 0]
result = []
for idx, answer in enumerate(answers):
if answer == pattern1[idx%len(pattern1)]:
score[0] += 1
if answer == pattern2[idx%len(pattern2)]:
score[1] += 1
if answer == pattern3[idx%len(pattern3)]:
score[2] += 1
for idx, s in enumerate(score):
if s == max(score):
result.append(idx+1)
return result
리스트를 idx % len(pattern)으로 반복 순회했다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Python] 구명보트 (0) | 2021.12.28 |
---|---|
[프로그래머스][Python] 카펫 (0) | 2021.12.06 |
[프로그래머스][Python] 이중우선순위큐 (0) | 2021.12.02 |
[프로그래머스][Python] H-Index (0) | 2021.12.02 |
[프로그래머스][Python] 가장 큰 수 (0) | 2021.11.30 |