본문 바로가기
2022-3/1일1코딩

[BOJ] 1202 python (우선순위큐 공부)

by 이망고_ 2022. 10. 17.

이 문제도 우선순위 큐 문제였다.

 

우선 v 값을 정렬하여서 max 값을 저장하는 방식으로 풀면 되지 않나

그리고 있다면 v 값에 += 하는 sum 으로 출력하면?

 

우선순위큐로 푸는 문제였다. 

 

우선순위 큐에 대해 잘 설명해주는 강의있어서 참고하고,

기본적인 문법과 사용, 큐의 작동 등을 자세하고 심플하게 알려주어서 도움이 되었다. 

https://www.daleseo.com/python-heapq/   

 

0. 응용으로 힙정렬 구현

 

heap_sort 해주고 인자값으로 nums 받고

돌아가면서 heap 리스트에 num 값 넣어주고

 

while heap:

heap이 0이 될 때까지 반복해주고, heappop 으로 pop된 num들을 append 시켜준다.

 

return 해주면은, 힙 정렬되어서 출력이 됨다.

 

 

1.이 최대힙이 대박이었는데

 

처음에 문제 풀고 - 를 붙여서 출력하면 max heap 으로 나온다, 만 생각했다.

근데 원리가 이거였다.

- 를 붙여도 여전히 min heap 으로 가장 작은 값들이 출력된다, 일반 num 으로 튜플형식으로 push를 해주었으니

num 의 경운, max heap으로 정렬이 된 상태인 것.

 

2. 문제 풀이

import sys
import heapq
input = sys.stdin.readline

n,k=map(int, input().split())

dia = [list(map(int, input().split())) for _ in range(n)]
bag = [int(input()) for _ in range(k)]
dia.sort()
bag.sort()

result=0
temp=[]
for i in bag:
    while dia and i>dia[0][0]:
        heapq.heappush(temp, -dia[0][1])
        heapq.heappop(dia)

    if temp:
        result += heapq.heappop(temp)

print(-result)
dia = [list(map(int, input().split())) for _ in range(n)] 
으로 해서 줄일 수 있고
 
bag = [int(input()) for _ in range(k)]
bag의 경우 한 수만 입력 받으니 map 안 써도 됩니다.
 
if temp:
        result += heapq.heappop(temp)
값이 temp 에 있는 경우는 += 해주세요
 
후에 출력시에는 max heap 값을 출력해주어야 하니, -result 값이니다..
 
 
 
다시 한 번 풀어봐야겠음
 

 

'2022-3 > 1일1코딩' 카테고리의 다른 글

[BOJ] 1744 python  (0) 2022.10.19
[BOJ] 1049 python  (0) 2022.10.18
[BOJ] 4796 python (이번주 뭔.. 웨 안푸렀어..?)  (0) 2022.10.15
[BOJ] 16953 python  (1) 2022.10.07
[BOJ] 1439 python  (0) 2022.10.06