1202번 - 보석 도둑
일단 문제 문제해결은 했는데요,,
처음에 queue/PriorityQueue 모듈로 아무리 해도 시간 초과가 발생해서 조금 구글링을 해보니 heapq 모듈을 쓰기도 하더라구요
혹시나 해서 heapq 모듈로 해봤더니 같은 알고리즘인데도 시간 초과 없이 해결이 돼서 의문이 생겼습니다.
.
queue의 PriorityQueue 모듈에선 다음과 같은 코드를,
pq.put(-arr[i][1])
ans -= pq.get()
heapq 모듈에선 다음과 같은 코드를 사용했는데요,
heapq.heappush(pq,-arr[i][1])
ans -= heapq.heappop(pq)
PriorityQueue.put()과 heapq.heappush(), PriorityQueue.get()과 heapq.heappop()의 시간복잡도가 다른가요?
인터넷을 조금 찾아보니 PriorityQueue 모듈도 내부적으로 heap 모듈을 이용해 구현되어서,
네 함수 모두 O(logN)의 시간복잡도를 가지는 것 같은데 왜 이런 차이가 발생하는지 궁금합니다 ㅠㅠ
PriorityQueue는 동기화를 지원해서 더 느린 것으로 알고 있습니다.
시간 복잡도의 문제는 아니고요.
다른 문제에서 heapq로 했더니 바로 됩니다. 감사합니다.
댓글을 작성하려면 로그인해야 합니다.
ajy720 3년 전
일단 문제 문제해결은 했는데요,,
처음에 queue/PriorityQueue 모듈로 아무리 해도 시간 초과가 발생해서 조금 구글링을 해보니 heapq 모듈을 쓰기도 하더라구요
혹시나 해서 heapq 모듈로 해봤더니 같은 알고리즘인데도 시간 초과 없이 해결이 돼서 의문이 생겼습니다.
.
queue의 PriorityQueue 모듈에선 다음과 같은 코드를,
pq.put(-arr[i][1])
ans -= pq.get()
.
heapq 모듈에선 다음과 같은 코드를 사용했는데요,
heapq.heappush(pq,-arr[i][1])
ans -= heapq.heappop(pq)
.
PriorityQueue.put()과 heapq.heappush(), PriorityQueue.get()과 heapq.heappop()의 시간복잡도가 다른가요?
인터넷을 조금 찾아보니 PriorityQueue 모듈도 내부적으로 heap 모듈을 이용해 구현되어서,
네 함수 모두 O(logN)의 시간복잡도를 가지는 것 같은데 왜 이런 차이가 발생하는지 궁금합니다 ㅠㅠ