woghdclf   2년 전

heappush와 heappop에 데이터를 넣는 순서에 따라 시간 초과가 발생합니다.

17, 21, 28 번 라인에 노드와 거리(비용) push, pop 순서를 다음과 같이 바꿔주면 시간초과가 발생합니다. 

17 - heapq.heappush(q,(S,0))

21 - now, co = heapq.heappop(q)

28 - heapq.heappush(q,(i[0], cost))

반대로 다시 바꿔주면 정답처리가 되는데 이유가 궁금합니다.

choko100   2년 전

안녕하세요, Python 의 heapq 는 첫번째 요소를 기준으로 정렬합니다.

cost 를 기준으로 heapq를 구성해야하기 때문에, cost 가 맨 앞에 와야 맞습니다!

(그렇지 않은 경우, heap 이 제대로 구성되지 않아 우선순위를 이용해 빠르게 끝나지 못하고 모든 경우를 다 돌기 때문에 시간 안에 들어올 수가 없습니다)

댓글을 작성하려면 로그인해야 합니다.