문제 설명

 

문제 접근 방법

  • lv1의 문제인 만큼 경우의 수를 찾는게 매우 쉽다. 각 수험자는 찍는 패턴이 나오고 이것을 답과 비교하여 맞으면 맞는 개수를 올려주면 된다.
  • 찍는 패턴은 일정 길이만큼 가다가 다시 반복되므로 인덱스에 배열의 길이만큼 나눈 나머지로 반복을 표현할 수 있다.
  • 가장 많이 맞춘 사람을 골라야 하므로 1, 2, 3번이 맞춘 개수를 표현해야 한다.  정렬을 수행할 시에 인덱스가 뒤섞여 답을 내지 못하므로 [맞춘 개수, 수포자 번호]로 score을 정의하면 된다.
  • 이후 정렬을 수행해 최대 값을 찾고, 해당 최대 값과 같은 값을 가진 친구의 수포자 번호를 answer에 넣으면 해결된다. 동일한 값을 가지는 경우에도 순서대로 찾으니 조건을 만족한다.

 

풀이 코드

def solution(answers):
    answer = []
    data = [
        [1, 2, 3, 4, 5],
        [2, 1, 2, 3, 2, 4, 2, 5],
        [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    ]
    
    score = [[0, 1], [0, 2], [0, 3]]
    
    for p in range(3):
        for i in range(len(answers)):
            if data[p][i % len(data[p])] == answers[i]:
                score[p][0] += 1
    
    score.sort(key= lambda x: x[0], reverse=True)
    mx_score = score[0][0]
    
    for element in score:
        if element[0] == mx_score:
            answer.append(element[1])
            
    return answer

 

복사했습니다!