문제 설명

입출력 예

Untitled

내 풀이 :

import math
def solution(answers):
    answer = []
    s = [[1, 2, 3, 4, 5] * math.ceil((len(answers)/5)),
        [2, 1, 2, 3, 2, 4, 2, 5] * math.ceil((len(answers)/8)),
        [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] * math.ceil((len(answers)/10))]
    score = [0, 0, 0]
    for i in range(len(s)):
        for j in range(len(answers)):
            if s[i][j] == answers[j]:
                score[i] += 1

    max_score = max(score)
    if max_score == score[0]:
        answer.append(1)
    if max_score == score[1]:
        answer.append(2)
    if max_score == score[2]:
        answer.append(3)   

    return answer

#answers = [1,2,3,4,5]
answers = [1,3,2,4,2]
print(solution(answers))
  1. 각자의 정답 배열을 answers 크기에 맞춰 만들기 -> ceiling
  2. 맞춘 갯수가 있는 리스트 만들기
  3. 그중에서 가장큰 수 추출 max ?
  4. 여러명일 경우 올림차수

다른 사람 해석 :

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

다른 사람의 해석에서 나머지 부분은 비슷했지만 처음부터 다른 사람들의 정답을 answer의 길이에 맞추어 초기화한 것과 달리 인덱스 값을 나누었습니다.

또한 for in 뒤에 enumerate()를 이용하여 인덱스와 원소로 이루어진 튜플을 할당 받을 수 있도록 하였습니다.

https://www.daleseo.com/python-enumerate/

처음에 계속해서 5~12, 14번 테스트케이스가 통과가 되지 않았는데 그 이유는 가장 높은 점수를 가진 사람 만을 추출하고 여러 명일 경우 오름차순으로 정렬해 출력하는 것인데 그냥 맞춘 수가 높은 순으로 출력을 하였기 때문입니다.

이 문제를 풀 때 한번에 풀지 않고 풀다가 몇 일 후에 이어 풀게 되면서 문제를 잘못 해석한 것입니다. 이렇게 문제를 잘못 이해해 틀린 것은 내가 틀린 것이 아니라는 생각에 오히려 좋기도 하고 이런 것에 틀린 자신에 화가 나기도 합니다.