Coding - Algo/python
[프로그래머스] 모의고사 (python 파이썬)
jainn
2021. 6. 10. 00:00
728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/42840
풀이 및 소스코드
각 수포자가 찍는 방식을 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
반응형