https://school.programmers.co.kr/learn/courses/30/lessons/42628
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
โ 1์ฐจ ํ์ด
import heapq
def solution(operations):
heap = []
for operation in operations:
[inst, value] = operation.split(' ')
value = int(value)
if inst == 'I':
# heap ์ฝ์
heapq.heappush(heap, value)
elif heap:
if value > 0:
# maxHeap์ ์์ฑํ๊ธฐ ์ํด ๋ถํธ ๋ฐ๋๋ก ๋ณ๊ฒฝ
for i in range(len(heap)):
heap[i] = -heap[i]
heapq.heapify(heap)
heapq.heappop(heap)
# ๋ค์ ๋ถํธ ๋๋ ค๋๊ธฐ
for i in range(len(heap)):
heap[i] = -heap[i]
heapq.heapify(heap)
else:
heapq.heappop(heap)
if not heap:
return [0, 0]
return [max(heap), heap[0]]
์ผ๋จ ๋ฌธ์ ์ ํด๊ฒฐ ๋ก์ง์ ๊ฐ๋จํ ๋ฌธ์ ์๋ค.
์ฝ์ , ์ญ์ (์ต๋๊ฐ, ์ต์๊ฐ) ๋ช ๋ น์ ์ํํด ํ์ ๋ฃ์ด์ฃผ๊ณ , ๋ช ๋ น์ ๋ชจ๋ ์ํํ๊ณ ๋จ์ ํ์์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ๋ด์ ๋ฆฌํดํด์ฃผ๋ฉด๋๋ค.
์ผ๋จ, ์ต๋, ์ต์๊ฐ์ ๋ณด๊ณ ํ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ ๊ทผํ์๋๋ฐ,
๊ณ ๋ฏผ๋๋ ํฌ์ธํธ๋ก๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ ์ต์ํ์ ๊ฐ์ง๋๋ฐ, ์ต๋ํ์ ๊ตฌํํ๊ธฐ์ํด์ ๋ถํธ๋ง ๋ฐ๋๋ก ๋ฃ์๋ค๊ฐ ๋บ๋ ๋ค์ ๋๋ ค์ฃผ๋ฉด ๋๋ค.
ํ์ง๋ง, ๋ช ๋ น์ ๋ฐ๋ผ ์ต์,์ต๋๊ฐ์ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์ถ์ถํด์ผํ๋ค๋ณด๋, ์ด๊ฒ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํฌ์ธํธ์ธ๊ฒ ๊ฐ๋ค.
์ผ๋จ, ๋ ์ค๋ฅด๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง์๋ค.
1. ์ต๋๊ฐ์ ์ถ์ถํ๊ธฐ ์ํด heap์ ์ ์ ์ต๋ํ์ผ๋ก ๋ณ๊ฒฝํ๊ณ , ๋ค์ ๋๋ ค๋๋๋ค.
2. ์ค๋ฆ์ฐจ์ sort๋ฅผ ํ๋ค, ์ฒซ๋ฒ์งธ ์์๋ฅผ ์ ๊ฑฐํ๋ค.
3. max๊ฐ์ ์ฐพ๊ณ , remove(max_value)์ผ๋ก ์ ๊ฑฐํ๋ค.
๊ฐ ๋ฐฉ๋ฒ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋น๊ตํด๋ณด์.
1. ๋ถํธ ๋ฐ์
2. ์ค๋ฆ์ฐจ์ ์ ๋ ฌ O(n log n) + ์ฒซ๋ฒ์งธ ์์ ์ ๊ฑฐ O(1)+ ๋ค์ heapify O(n)
3. max๊ฐ ์ฐพ๊ธฐ O(n) + remove O(n) + ๋ค์ heapify O(n)
2๋ฒ์ ์ ์ธํ๊ณ ๋, ์๊ฐ๋ณต์ก๋๊ฐ ๋์ผํ๋ฏ๋ก ์ฐจ์ด๊ฐ ๋์ง์๋๋ค.
โ ๋ค๋ฅธ ํ์ด (3๋ฒ ๋ฐฉ์)
import heapq
def solution(operations):
heap = []
for operation in operations:
[inst, value] = operation.split(' ')
value = int(value)
if inst == 'I':
heapq.heappush(heap, value)
elif heap:
if value > 0:
heap.remove(max(heap))
else:
heapq.heappop(heap)
if not heap:
return [0, 0]
return [max(heap), heap[0]]
3๋ฒ ๋ฐฉ์์ด ๋ ๊น๋ํ๊ณ , ์ง๊ด์ ์ธ ์ฝ๋์ด๋ฏ๋ก, ๋ ์ข์ ๋ฐฉ๋ฒ์ธ๊ฒ ๊ฐ๋ค!
'ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv.2] H-Index (0) | 2024.08.02 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv.1] ์นด๋๋ญ์น (0) | 2024.08.01 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv.2] ๋ ๋งต๊ฒ (0) | 2024.07.30 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv.2] ๊ธฐ๋ฅ๊ฐ๋ฐ (0) | 2024.07.29 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2024.07.26 |
https://school.programmers.co.kr/learn/courses/30/lessons/42628
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
โ 1์ฐจ ํ์ด
import heapq
def solution(operations):
heap = []
for operation in operations:
[inst, value] = operation.split(' ')
value = int(value)
if inst == 'I':
# heap ์ฝ์
heapq.heappush(heap, value)
elif heap:
if value > 0:
# maxHeap์ ์์ฑํ๊ธฐ ์ํด ๋ถํธ ๋ฐ๋๋ก ๋ณ๊ฒฝ
for i in range(len(heap)):
heap[i] = -heap[i]
heapq.heapify(heap)
heapq.heappop(heap)
# ๋ค์ ๋ถํธ ๋๋ ค๋๊ธฐ
for i in range(len(heap)):
heap[i] = -heap[i]
heapq.heapify(heap)
else:
heapq.heappop(heap)
if not heap:
return [0, 0]
return [max(heap), heap[0]]
์ผ๋จ ๋ฌธ์ ์ ํด๊ฒฐ ๋ก์ง์ ๊ฐ๋จํ ๋ฌธ์ ์๋ค.
์ฝ์ , ์ญ์ (์ต๋๊ฐ, ์ต์๊ฐ) ๋ช ๋ น์ ์ํํด ํ์ ๋ฃ์ด์ฃผ๊ณ , ๋ช ๋ น์ ๋ชจ๋ ์ํํ๊ณ ๋จ์ ํ์์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ๋ด์ ๋ฆฌํดํด์ฃผ๋ฉด๋๋ค.
์ผ๋จ, ์ต๋, ์ต์๊ฐ์ ๋ณด๊ณ ํ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ ๊ทผํ์๋๋ฐ,
๊ณ ๋ฏผ๋๋ ํฌ์ธํธ๋ก๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ ์ต์ํ์ ๊ฐ์ง๋๋ฐ, ์ต๋ํ์ ๊ตฌํํ๊ธฐ์ํด์ ๋ถํธ๋ง ๋ฐ๋๋ก ๋ฃ์๋ค๊ฐ ๋บ๋ ๋ค์ ๋๋ ค์ฃผ๋ฉด ๋๋ค.
ํ์ง๋ง, ๋ช ๋ น์ ๋ฐ๋ผ ์ต์,์ต๋๊ฐ์ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์ถ์ถํด์ผํ๋ค๋ณด๋, ์ด๊ฒ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํฌ์ธํธ์ธ๊ฒ ๊ฐ๋ค.
์ผ๋จ, ๋ ์ค๋ฅด๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง์๋ค.
1. ์ต๋๊ฐ์ ์ถ์ถํ๊ธฐ ์ํด heap์ ์ ์ ์ต๋ํ์ผ๋ก ๋ณ๊ฒฝํ๊ณ , ๋ค์ ๋๋ ค๋๋๋ค.
2. ์ค๋ฆ์ฐจ์ sort๋ฅผ ํ๋ค, ์ฒซ๋ฒ์งธ ์์๋ฅผ ์ ๊ฑฐํ๋ค.
3. max๊ฐ์ ์ฐพ๊ณ , remove(max_value)์ผ๋ก ์ ๊ฑฐํ๋ค.
๊ฐ ๋ฐฉ๋ฒ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋น๊ตํด๋ณด์.
1. ๋ถํธ ๋ฐ์
2. ์ค๋ฆ์ฐจ์ ์ ๋ ฌ O(n log n) + ์ฒซ๋ฒ์งธ ์์ ์ ๊ฑฐ O(1)+ ๋ค์ heapify O(n)
3. max๊ฐ ์ฐพ๊ธฐ O(n) + remove O(n) + ๋ค์ heapify O(n)
2๋ฒ์ ์ ์ธํ๊ณ ๋, ์๊ฐ๋ณต์ก๋๊ฐ ๋์ผํ๋ฏ๋ก ์ฐจ์ด๊ฐ ๋์ง์๋๋ค.
โ ๋ค๋ฅธ ํ์ด (3๋ฒ ๋ฐฉ์)
import heapq
def solution(operations):
heap = []
for operation in operations:
[inst, value] = operation.split(' ')
value = int(value)
if inst == 'I':
heapq.heappush(heap, value)
elif heap:
if value > 0:
heap.remove(max(heap))
else:
heapq.heappop(heap)
if not heap:
return [0, 0]
return [max(heap), heap[0]]
3๋ฒ ๋ฐฉ์์ด ๋ ๊น๋ํ๊ณ , ์ง๊ด์ ์ธ ์ฝ๋์ด๋ฏ๋ก, ๋ ์ข์ ๋ฐฉ๋ฒ์ธ๊ฒ ๊ฐ๋ค!
'ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv.2] H-Index (0) | 2024.08.02 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv.1] ์นด๋๋ญ์น (0) | 2024.08.01 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv.2] ๋ ๋งต๊ฒ (0) | 2024.07.30 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv.2] ๊ธฐ๋ฅ๊ฐ๋ฐ (0) | 2024.07.29 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2024.07.26 |