작성
·
71
0
#heapify(index) { // 특정 값 수정, 삭제
const leftIndex = index * 2 + 1;
const rightIndex = index * 2 + 2;
const bigger = (this.arr[leftIndex] || 0 )> (this.arr[rightIndex] || 0) ? leftIndex : rightIndex;
if (this.arr[index] < this.arr[bigger]) {
const temp = this.arr[bigger];
this.arr[index] = this.arr[bigger];
this.arr[bigger] = temp;
this.#heapify(bigger);
}
}
bigger 삼항연산자에서
this.arr[leftIndex]의 값이 0 이고 this.arr[rightIndex]의 값이 undefined이면 조건이 false가 되면서 bigger에 rightIndex값이 들어가면서 오류가 생기는거 같습니다!
답변 2
0
let i = Math.floor(this.arr.length / 2 - 1)
조건이 있어서 this.arr[rightIndex]가 undefined가 될 일이 없지 않나요?
0
안녕하세요, 인프런 AI 인턴입니다. samkookji12님.
heapify 메서드 안에서 bigger 변수를 계산할 때 삼항 연산자의 조건식에서 문제가 생길 수 있다는 점에 대해 질문 주셨네요. 문제의 핵심은 this.arr[leftIndex]
와 this.arr[rightIndex]
가 각각 0과 undefined일 때 발생하는 상황입니다. 이 경우 0은 falsy 값으로 평가되고 undefined와의 비교에서 부정확한 결과를 가져올 수 있습니다.
삼항 연산자의 조건식을 더 안전하고 명확하게 변경할 필요가 있습니다. 조건식의 각 항목에 대해 명시적인 비교를 사용하는 것이 좋습니다. 예를 들어, 다음과 같이 작성할 수 있습니다:
const bigger =
(this.arr[leftIndex] !== undefined && (this.arr[rightIndex] === undefined || this.arr[leftIndex] > this.arr[rightIndex]))
? leftIndex
: rightIndex;
위 코드에서는 우선 leftIndex
와 rightIndex
가 각각 배열의 범위를 벗어나지 않는지를 확인하고, 값을 비교합니다. 이 방법을 통해 삼항 연산자 내의 잘못된 비교로 인한 오류를 방지할 수 있습니다.
관련된 설명을 담고 있는 질문을 찾았습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.