문제
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.
해결 방법
반복되는 패턴을 찾아서 수포자들의 답안지 리스트를 만들어준다.
반복되는 패턴의 최소 개수는 5개이므로 만일 5개 이상의 input이 들어오면 (input//5) + 1 해준 만큼 답안지 리스트에 곱해서 추가적으로 생성한다.
인덱스 번호 돌면서 비교하고 정답과 동일하면 supo 리스트에 추가
가장 많이 맞힌 개수를 뽑아내고 동점자가 있을 수도 있으니 supo 리스트 돌면서 탐색 후 리턴
코드
def solution(answers):
answer = []
supo = [0, 0, 0]
answersLen = len(answers)
temp = 1
if answersLen > 5:
temp = (answersLen // 5) + 1
first = [1,2,3,4,5] * temp
second = [2, 1, 2, 3, 2, 4, 2, 5] * temp
third = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] * temp
for i in range(answersLen):
if answers[i] == first[i]:
supo[0] += 1
if answers[i] == second[i]:
supo[1] += 1
if answers[i] == third[i]:
supo[2] += 1
best = max(supo)
for j in range(3):
if supo[j] == best:
answer.append(j+1)
return answer
반응형
'Problem Solve > 프로그래머스' 카테고리의 다른 글
[프로그래머스 - Python3] 타겟 넘버 (0) | 2024.07.03 |
---|---|
[프로그래머스 - Python3] 피로도 (0) | 2024.06.18 |
[프로그래머스 - Python3] 카펫 (0) | 2024.06.17 |
[프로그래머스 - Python3] 소수 찾기 level 2 (0) | 2024.04.11 |
[프로그래머스 - Python3] 최소직사각형 (0) | 2024.04.09 |