본문 바로가기

알고리즘/프로그래머스

[프로그래머스][Python] 모의고사

문제를 정리해보자.

 

수포자 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)으로 반복 순회했다.