프로그래밍/Algorithm

프로그래머스 모의고사 파이썬

모지사바하 2021. 11. 18. 11:17

https://programmers.co.kr/learn/courses/30/lessons/42840

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

 

이 문제는 오랜만에 쉬운 문제였다.

 

무척 쉽다고 느껴서 급하게 후다닥 풀고 제출했는데 서너번 실패가 떠서 조금 당황하기도 했으나 금방 통과했다.

 

풀이과정:

1. 수포자1, 수포자2, 수포자3 이 찍는 패턴이 모두 다르므로 (정확히는 횟수가 다르므로) 모든 수포자의 찍는 횟수를 동일하게 맞춰주기 위해 최소 공통 배수인 40으로 맞춰주었다.

 

2. 답안을 순회하면서 각 정답자의 스코어를 증가시킨다.

 

3. 수포자의 점수의 최대치가 첫번째 수포자의 점수와 같다면 첫번째 수포자는 최대 점수를 맞았으므로 결과에 추가한다.

 

4. 수포자의 점수의 최대치가 두번째 수포자의 점수와 같다면 두번째 수포자는 최대 점수를 맞았으므로 결과에 추가한다. 

-> 첫번째 수포자와 동점이라는 뜻이다.

 

5. 수포자의 점수의 최대치가 세번째 수포자의 점수와 같다면 세번째 수포자는 최대 점수를 맞았으므로 결과에 추가한다.

-> 첫번째, 두번째 수포자와 동점이라는 뜻이다.

def solution(answers):
    st = [1, 2, 3, 4, 5] * 8
    nd = [2, 1, 2, 3, 2, 4, 2, 5] * 5
    rd = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] * 4
    pick_index = 0

    st_score = 0
    nd_score = 0
    rd_score = 0
    for i, a in enumerate(answers):
        if a == st[pick_index]:
            st_score += 1

        if a == nd[pick_index]:
            nd_score += 1

        if a == rd[pick_index]:
            rd_score += 1

        if pick_index == 39:
            pick_index = 0
        else:
            pick_index += 1

    answer = []
    if max(st_score, nd_score, rd_score) == st_score:
        answer.append(1)
    if max(st_score, nd_score, rd_score) == nd_score:
        answer.append(2)
    if max(st_score, nd_score, rd_score) == rd_score:
        answer.append(3)

    return answer