[내 풀이]
# 최솟값이 계속 변화하고, 그것을 기준으로 알고리즘이 돌아가야함 => heapq 사용
# 런타임 에러: 아예 불가능한 경우 return -1 를 고려하지 않음
import heapq as hq
def solution(scoville, K):
scoville.sort()
cnt = 0
while len(scoville) >= 2 and scoville[0] < K:
a, b = hq.heappop(scoville), hq.heappop(scoville)
hq.heappush(scoville, a + 2 * b)
cnt += 1
return cnt if scoville[0] >= K else -1
# 내 풀이
#무의식적으로 힙이 정렬된 리스트랑 같다고 생각했다.
#힙은 최소값만 보장하지, 나머지 값들은 오름차순이 아니라는 것을 주의해야한다.
#파이썬에서는 평범한 리스트에 heapq 함수를 사용하는 것일 뿐이다. 따라서 heappush를 한다고 힙이 되는 것은 아니다.
#일반 리스트를 힙 구조로 바꾸고 싶다면 O(n)이 걸리고 .heapify() 함수를 이용하면 된다. remove후에 꼭 다시 heapify()해주어야 한다.
import heapq as hq
def solution(operations):
operations = [x.split() for x in operations]
answer = []
for op, x in operations:
if op == "I":
hq.heappush(answer, int(x))
elif op == "D":
if answer:
if x=="-1":
hq.heappop(answer)
else:
answer.remove(max(answer))
hq.heapify(answer) #꼭 heapify 다시 해주어야 한다.
return [max(answer), answer[0]] if answer else [0, 0]
댓글