본문 바로가기

programming study/Algorithm

[프로그래머스] 모의고사 - python 풀이

본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다

파이썬 코드

# 모의고사
def solution(answers):
    # 가장 많은 문제를 맞힌 사람을 나타내는 리스트
    answer = []
    # 수포자 1
    supo_1 = [1, 2, 3, 4, 5]
    # 수포자 2
    supo_2 = [2, 1, 2, 3, 2, 4, 2, 5]
    # 수포자 3
    supo_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]

    # 각 수포자가 맞은 수를 기록하는 배열
    cnt = [0, 0, 0]

    # 입력받은 답안을 토대로 각 수포자가 얼마나 맞았는지 탐색
    for i in range(len(answers)):
        # 수포자 1은 5를 주기로 반복
        if answers[i] == supo_1[i % 5]:
            cnt[0] += 1
        # 수포자 2는 8을 주기로 반복
        if answers[i] == supo_2[i % 8]:
            cnt[1] += 1
        # 수포자 3은 10을 주기로 반복
        if answers[i] == supo_3[i % 10]:
            cnt[2] += 1

    # 가장 많이 맞춘 수
    max_cnt = max(cnt)

    # 가장 많이 맞춘 사람을 배열에 담기
    for i in range(3):
        # 가장 많이 맞춘 수와 같은 cnt 요소의 인덱스를 +1 하여 answer에 담기
        if max_cnt == cnt[i]:
            answer.append(i + 1)

    return answer


print(solution([1, 3, 2, 4, 2, 2, 3, 1, 4, 5, 2, 3, 4]))

Comment

각 수포자가 답을 쓰는 규칙을 리스트로 만들고 수포자들의 정답수를 기록하는 별도의 리스트를 만들었다. 그 이후는 주어진 답안을 하나 하나 접근하며 수포자가 쓰는 규칙과 비교하여 같으면 카운트를 하는 방식으로 탐색을 하였다. 이 때, 인덱스 범위를 초과하지 않고 적절한 순서의 수포자의 규칙을 접근하기 위해서 모듈러 연산을 사용하였다.

Reference

프로그래머스