|
์ฝ๋ ์์ฑํ๊ธฐ
heapq๋ฅผ ์ด์ฉํ ์ฝ๋
import heapq
def solution(scoville, K):
answer = 0
heapq.heapify(scoville)
# ๋ฆฌ์คํธ๋ฅผ heap์ ํ์์ผ๋ก ์ ๋ ฌํ๊ฒ ํด์ค
# while๋ฌธ์ ๊ฑธ์ด์ค ๋ ์ต์๊ฐ์ด K๋ณด๋ค ์๋ค๋ ์กฐ๊ฑด์ ๋ฐ๋ผ์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฌ๋ฏ๋ก
# ์ ์ผ ์ฒ์ ์ต์๊ฐ์ ๊ตฌํ๋ ๊ฒฝ์ฐ๋ while๋ฌธ ๋ฐ์์ ๋ฏธ๋ฆฌ ๊ณ์ฐํด์ค
if(len(scoville) == 1):
if(heapq.heappop(scoville) < K):
return -1
else:
return answer
elif (len(scoville) == 0):
return -1
else:
min1 = heapq.heappop(scoville)
min2 = heapq.heappop(scoville)
level = min1
while level < K:
#queue.put(min1 + 2*min2)
heapq.heappush(scoville, min1 + 2*min2)
answer += 1
if(len(scoville) >=2):
min1 = heapq.heappop(scoville)
min2 = heapq.heappop(scoville)
level = min1
elif(len(scoville) == 1):
if (heapq.heappop(scoville) < K):
return -1
else:
return answer
# return์ด ์๋ ํ์์ด๋ฏ๋ก answer์ 1์ ๋ํด์ฃผ์ง ์์
else:
return -1
# ๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๋ฅผ K ์ด์์ผ๋ก ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์๋ -1์ return ํฉ๋๋ค.
return answer
Python
๋ณต์ฌ
|
์ฝ๋ ์ค๋ช
ํ๊ธฐ
(1) ๊ฐ์ฅ ์์ ์์ ๋ ๋ฒ์งธ๋ก ์์ ์๋ฅผ ๊ณ์ ๊ตฌํ ์ ์์ด์ผ ํ๋ค โ ์๋์ผ๋ก ์ ๋ ฌ ๋๊ฒ ํ๋ ๊ฒฝ์ฐ๊ฐ best! โ ์ฐ์ ์์ ํ ์ด์ฉํ๊ธฐ(heapq, PriorityQueue ๋ชจ๋ ์ด์ฉ)
(2) ์๋ก ๊ณ์ฐํ ๊ฐ์ ๋ฆฌ์คํธ์ ์๋ก์ด ๊ฐ์ ๋ฃ์ ๋ ์๋๊ฐ ๋ง์ด ๊ฑธ๋ฆฌ์ง ์์์ผ ํ๋ค
โ ๋ฆฌ์คํธ๋ ๊ฐ์ appendํ ๋๋ง๋ค ๋ฆฌ์คํธ๊ฐ ์๋ก ์์ฑ๋์ด O(N)์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฏ๋ก ๊ฐ์ ๋ฃ๊ณ ํ์ํ ๋ ์๋๊ฐ ๋ ๋น ๋ฅธ(O(logN)) ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ์
(3) K๋ณด๋ค ์ปค์ง ์ ์๋ ๊ฒฝ์ฐ -1์ returnํ๋ ์กฐ๊ฑด
(4) ์ฐ์ ์์ ํ ๋ด๋ถ์ ์๋ ์์์ ๊ฐ์๊ฐ 2๊ฐ ๋ณด๋ค ์์ ๊ฒฝ์ฐ pop์ ํ ์ ์์ โ ์กฐ๊ฑด์ ๋ฐ๋ผ -1 ๋๋ answer๋ฅผ returnํด์ผ ํจ
โข
์์ ๊ฐ์๊ฐ 2๋ณด๋ค ์์ ๊ฒฝ์ฐ answer ๋๋ -1์ returnํ๋ ์กฐ๊ฑด
if(len(scoville) == 1):
if(heapq.heappop(scoville) < K):
return -1
else:
return answer
elif (len(scoville) == 0):
return -1
else:
min1 = heapq.heappop(scoville)
min2 = heapq.heappop(scoville)
level = min1
Python
๋ณต์ฌ
โข
while๋ฌธ์ ๊ฑธ์ด์ค ๋ ์ต์๊ฐ์ด K๋ณด๋ค ์๋ค๋ ์กฐ๊ฑด์ ๋ฐ๋ผ์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฌ๋ฏ๋ก ์ ์ผ ์ฒ์ ์ต์๊ฐ์ ๊ตฌํ๋ ๊ฒฝ์ฐ๋ while๋ฌธ ๋ฐ์์ ๋ฏธ๋ฆฌ ๊ณ์ฐํด์ค