힙은 부모가 두 자식들보다 크지 않은 것을 보장하는 것이지, 자식들간의 대소는 보장하지 않습니다. 원소가 3개 들은 경우 0번째 원소는 1번째와 2번째 원소의 부모이므로 이 둘보다 크지 않음이 보장되고, 1번째와 2번째 원소 사이의 대소 관계는 보장되지 않습니다.
그렇군요!! 정렬 상태를 유지해 주는 건줄 알았네요..
덕분에 배워갑니다!
너무 궁금해서 어그로성 제목 달았는데도 친절한 답변 주셔서 감사합니다! 복받으세요~~
댓글을 작성하려면 로그인해야 합니다.
whdgurclzls 4년 전
########코드보다 왜 heapq를 사용하는데 큰 값이 작은 값보다 먼저 위치하게 되었나가 주된 내용입니다.
b라는 배열에 heapq를 사용한 코드인데, 디버깅 중에 heapq를 출력해보니 더 큰값이 더 작은값보다 앞에 위치하는걸 발견했습니다.
코드는 아래와 같고
#입력 예제는 이렇습니다.
'''
1
2 2 10
1 1
0 2
'''
코드 돌려봤을때 두번째줄 결과가
[[0, 1, 0, 0], [1, 2, 1, 1], [0, 1, 0, 1]] 입니다. 분명 b배열은 heappush만으로 처리 했는데 대체 왜 어떻게... 더 큰 [1, 2, 1, 1] 값이 [0, 1, 0, 1] 값보다 먼저 나오게 되었을까요???
배열 크기를 제가 잘못생각하나 해서 파이썬에 sorted([[0, 1, 0, 0], [1, 2, 1, 1], [0, 1, 0, 1]]) 출력해봤더니 [[0, 1, 0, 0], [0, 1, 0, 1], [1, 2, 1, 1]] 이렇게 나와서 그 문제 같진 않네요..