inflearn logo
강의

Course

Instructor

Non-majors catching up with majors - Data Structures (with JavaScript)

heapify

heapify 안의 bigger 삼항연산자 질문

116

samkookji12

8 asked

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값이 들어가면서 오류가 생기는거 같습니다!

javascript 코딩-테스트 알고리즘

Answer 2

0

zerocho

let i = Math.floor(this.arr.length / 2 - 1)

조건이 있어서 this.arr[rightIndex]가 undefined가 될 일이 없지 않나요?

0

communityai8509

안녕하세요, 인프런 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;

위 코드에서는 우선 leftIndexrightIndex가 각각 배열의 범위를 벗어나지 않는지를 확인하고, 값을 비교합니다. 이 방법을 통해 삼항 연산자 내의 잘못된 비교로 인한 오류를 방지할 수 있습니다.

관련된 설명을 담고 있는 질문을 찾았습니다:

  • 조건문 안 플래그 값 - 이 질문에서는 조건문에서 truthy, falsy 값을 다루는 방법에 대해 설명하고 있습니다. 특정 조건의 명확한 사용이나 오류 방지 방법에 관심 있고, 모든 조건을 명시적으로 다루는 것이 허용될 때 자연스러운 경향이 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

2주차 개념#12 트리 순회

0

14

2

프론트엔드 학습 수준 문의

0

22

2

백준 사이트 서비스 종료

0

39

3

잠겨버린 사물함 시간초과 관련 질문입니다.

0

17

1

스택, 큐 연결리스트로 구현 과제 완료입니다!

0

93

1

LinkedList로 스택, 큐 구현하기 숙제

0

123

1

linkedList prev와 tail 사용 후 o(1) 구현.

0

165

1

숙제 : LinkedList로 Stack, Queue 구현하기

0

177

1

연결리스트 숙제

0

239

1

한번에 이해 안가는 제가 비정상 일까요...?

0

234

1

우선순위 큐 질문이 있습니다!

0

154

1

[숙제] minHeap 구현, maxHeap -> minHeap , minHeap -> maxHeap

1

235

1

최소힙 remove 구현하기

0

245

1

숙제 최소힙 만들기

0

152

1

숙제 length return 하기

0

194

1

숙제 : 같은 값을 넣은경우 에러 처리

0

181

1

영상 중간에 0:10 1:23초 수정에 따른 코드 최종본

1

143

1

숙제2 연결리스트를 이용하여 큐 구현하기

0

237

1

숙제1 LinkedList로 스택 구현하기

1

251

1

연결 리스트 구현 숙제 리뷰 부탁드려봅니다

1

345

2

let current = this.head 질문 있습니다!

0

251

1

퀴즈 답안

0

469

1

최소힙의 결과값과 최대힙->최소힙 결과값이 다른게 맞나요?

0

248

1

1주차 숙제에 대한 해답 코드는 따로 제공되지 않나요??

0

495

1