๐ฉ๐ป๐พ
[์ฝ๋ฉํ ์คํธ ๊ณ ๋์ Kit/Python] ํ(Heap) ๋ณธ๋ฌธ
์ฝ๋ฉํ
์คํธ/ํ๋ก๊ทธ๋๋จธ์ค
[์ฝ๋ฉํ ์คํธ ๊ณ ๋์ Kit/Python] ํ(Heap)
์ฅฌ์ค์ด 2023. 3. 14. 00:11728x90
ํ(heap)์ด๋?
- ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ์ํด ๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ
- ์์๋ค์ด ํญ์ ์ ๋ ฌ๋ ์ํ๋ก ์ถ๊ฐ๋๊ณ ์ญ์
- ์๊ฐ ๋ณต์ก๋ O(N)
ํ ํจ์ ํ์ฉํ๊ธฐ
- heapq.heappush(heap, item)
- heap์ item์ ์ถ๊ฐ
- heapq.heappop(heap)
- heap์์ ๊ฐ์ฅ ์์ ์์๋ฅผ pop
- ํ์ด ๋น์ด ์๋ ๊ฒฝ์ฐ, IndexError๊ฐ ํธ์ถ๋จ
- heapq.heapify(x)
- ๊ธฐ์กด ๋ฆฌ์คํธ๋ฅผ heap์ผ๋ก ๋ณํ
๋ฌธ์ ํ์ด
Q . ๋ ๋งต๊ฒ
import heapq
def solution(scoville, K):
answer = 0
heapq.heapify(scoville)
# ๊ฐ์ฅ ์์ ๊ฐ์ด K๋ณด๋ค ํด ๋๋ ์์ ํ์ X
if scoville[0] >= K:
return answer
while scoville[0] < K:
if len(scoville) == 1: # ์์๊ฐ 1๊ฐ๋ผ ๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๋ฅผ K ์ด์์ผ๋ก ๋ชป ๋ง๋ฆ
return -1
heapq.heappush(scoville, (heapq.heappop(scoville) + heapq.heappop(scoville) * 2))
answer += 1
return answer
import heapq
def solution(jobs):
heap = []
answer, now, i = 0, 0, 0
s = -1
while i < len(jobs):
for j in jobs:
if s < j[0] <= now:
# ์์
์๊ฐ ์งง์ ์์๋๋ก ์ฒ๋ฆฌํด์ผ ์ด ์์
์๊ฐ ์ต์๋จ
heapq.heappush(heap, (j[1], j[0]))
if heap:
current = heapq.heappop(heap)
s = now # ์์
์ข
๋ฃ์๊ฐ
now += current[0] # ํ์ฌ ์์
๊น์ง์ ์์
์๊ฐ ๋์ ๊ฐ
answer += now - current[1] # ์์ฒญ์์ ์ข
๋ฃ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ, current[1] = ์์ฒญ ๋ค์ด์จ ์๊ฐ
i += 1
else:
now += 1
return answer // i
import heapq
def solution(operations):
heap = []
max_heap = []
for i in operations:
current = i.split()
if current[0] == 'I':
data = int(current[1])
heapq.heappush(heap, data)
# ์ต๋ ํ ๊ตฌํ ์ํด [์ฐ์ ์์, ์ค์ ๊ฐ] ํํ๋ก ์ ์ฅ
heapq.heappush(max_heap, (data * -1, data))
else:
# heap ๋น์ด์์ผ๋ฉด ์คํํ ์ฝ๋๊ฐ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ์ฌ ๋ค์ ํ๋์ ๊ณ์ํด์ ์งํ
if len(heap) == 0:
pass
# ์ต๋๊ฐ ์ญ์
elif current[1] == '1':
max_value = heapq.heappop(max_heap)[1]
heap.remove(max_value)
# ์ต์๊ฐ ์ญ์
elif current[1] == '-1':
min_value = heapq.heappop(heap)
max_heap.remove((min_value * -1, min_value))
if heap:
return [heapq.heappop(max_heap)[1], heapq.heappop(heap)]
else:
return [0, 0]
728x90
'์ฝ๋ฉํ ์คํธ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ (0) | 2024.01.22 |
---|---|
[PCCP ๋ชจ์๊ณ ์ฌ #1] 1๋ฒ - ์ธํจ์ด ์ํ๋ฒณ (0) | 2023.11.05 |
[ํ๋ก๊ทธ๋๋จธ์ค/Python] ์์ด๊ฐ ์ซ์ด์ (0) | 2023.03.21 |
[ํ๋ก๊ทธ๋๋จธ์ค/Python] ๋๋ฌธ์์ ์๋ฌธ์ (0) | 2023.03.21 |
[ํ๋ก๊ทธ๋๋จธ์ค/Python] math ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ๊ธฐ (0) | 2023.03.11 |
Comments