zkfzpf56   3년 전

몇 번을 수정해 보아도 50%에서 자꾸 틀리네요..

dps2   3년 전

26번째 줄과 27번째줄이 같이 실행 될 수 있습니다.

그렇다면 right child를 보는게 아니라 조카를 보는 셈이 되겠죠?

27번째 줄을 else if로 바꾸시면 맞습니다.

akqjqcjs7   3년 전

저도 같은 문제로 해매고 있다가 이 글을 보고 문제는 해결했습니다. 하지만 26번줄은 오른쪽 자식이 작을 경우고 27번줄은 둘이 같다는 전제인데 2개가 동시에 들어갈

경우가 나올 수 있나요?

dps2   3년 전

넵 동시에 들어갈 수 있습니다.

왜냐하면 코드가 순차적으로 작동하기 때문입니다.

코드를 보면서 설명하자면 26번째 줄을 실행할때 child는 무조건 left child를 가르키고 있을 것입니다.(구현상 그렇게 되어있습니다.)

예를 들어 child 값이 16이라고 하겠습니다.

26번째 줄은 child와 child+1을 비교합니다. 즉 index 상으로 16과 17에 들어있는 값들을 비교하고 이 값들은 8의 left child와 right child입니다.

만약 여기서 if문이 참이라면 child++ 즉 child값이 17로 바뀌게 됩니다.

그러고 27번째 줄로 넘어가게 되는데 27번째 줄에서도 child와 child+1값을 비교합니다.

index 상으로 17과 18을 비교하는데 이는 8의 right child와 9의 left child입니다.

만일 이때 17과 18에 들어있는 값이 if문에 있는 조건을 만족한다면 (26번째 줄의 if문이 참일때 27번째 줄의 if문이 거짓이라는 보장이 없습니다.)

당연히 오작동하겠죠?

따라서 else if로 바꿔야 제대로 작동합니다 혹은 아래 첨부한 코드처럼 26번째줄과 27번째줄을 하나로 합쳐줘도 됩니다. 그런데 너무 길어서 별로긴하네요....

akqjqcjs7   3년 전

아 명쾌한 해답입니다. child가 증가하면 그 다음 child + 1도 증가한다는걸 몰랐네요. 정말로 감사합니다!!

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