Coding - Algo/python

[프로그래머스] 모의고사 (python 파이썬)

jainn 2021. 6. 10. 00:00
728x90

문제

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

 

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

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

programmers.co.kr

 

풀이 및 소스코드

각 수포자가 찍는 방식을 so 라는 리스트에 담아준다.

수포자 1부터 돌아가면서 점수를 구해 힙큐에 담아준다.

여기서 최대힙을 만들어야하기 때문에 점수에 - 부호를 붙혀서 넣어주었다.

그렇게 heappop을 하면 -부호가 붙은 제일 큰 값이 나오기 때문에 쉽게 최대 점수를 갖는 학생을 구할 수 있다.

import heapq
def solution(answers):
    answer = []
    hq = []
    so = [[1,2,3,4,5], [2,1,2,3,2,4,2,5], [3,3,1,1,2,2,4,4,5,5]]
    for i in range(3):
        point = 0
        sn = len(so[i])
        for j in range(len(answers)):
            if sn <= j:
                if answers[j] == so[i][j%sn]:
                    point += 1
            else:
                if answers[j] == so[i][j]:
                    point += 1
        heapq.heappush(hq, (-point, i))
    maxn, index = heapq.heappop(hq)
    answer.append(index+1)
    while hq:
        n, nowi = heapq.heappop(hq)
        if n!=maxn:
            break
        else:
            answer.append(nowi+1)
    answer.sort()
    return answer
반응형