11286번 - 절댓값 힙
heap 을 배열을 이용해서 구현해 봤습니다.
last 는 가장 말단 노드의 번호입니다.
root 노드는 1부터 시작하게 설정했습니다.
push 함수에서는
우선 절대값이 작으면 바꾸고, 절대값이 같으면 작은값으로 바꾸고
pop 함수에서는
l = 왼쪽자식 r=오른쪽자식 으로
왼쪽자식이 없을때, 오른쪽 자식이 없을때, 둘다 없을 때, 둘다 있을 때로 나눠서 풀었습니다.
예제 케이스는 모두 나오는데 어디에서 오류가 날까요...
pop을 할 때는 루트와 마지막 노드를 교환한 뒤에 그 노드가 제자리를 찾아갈 때까지 반복적으로 자식 노드와 교환을 해줘야 되는데, 이 코드에서는 pop에서 i가 절대 증가하지 않고 루트 자리만 지키고 있기 때문에 문제가 됩니다.
간단한 반례로, 1부터 10까지 push 하고 계속 팝해보면 틀리는 때가 나옵니다.
for문에서 증가값을 비워놓고, 까먹어버렸네요!! 감사합니다.
댓글을 작성하려면 로그인해야 합니다.
his130 6년 전
heap 을 배열을 이용해서 구현해 봤습니다.
last 는 가장 말단 노드의 번호입니다.
root 노드는 1부터 시작하게 설정했습니다.
push 함수에서는
우선 절대값이 작으면 바꾸고, 절대값이 같으면 작은값으로 바꾸고
pop 함수에서는
l = 왼쪽자식 r=오른쪽자식 으로
왼쪽자식이 없을때, 오른쪽 자식이 없을때, 둘다 없을 때, 둘다 있을 때로 나눠서 풀었습니다.
예제 케이스는 모두 나오는데 어디에서 오류가 날까요...