강의로 돌아가기
김재원

(코드 첨부 X, 약 스포(문제유형))자바스크립트 테스트케이스 15번 이후로 런타임 에러가 나시는 분들을 위해

혹시 코드에 ...diffs 또는 ...times와 같이 스프레드 연산자를 이용하여 배열을 펼치셨는지 확인해주세요.

저의 경우 이분 탐색을 위해 left, right를 선언하기 위해

let [left, right] = [1, Math.max(...diffs)]

와 같은 방법을 이용하였고 실행 결과 런타임 에러가 나게 되었습니다.

이와 관련하여 찾아보던 도중
스프레드 연산자는 호출 스택에 배열을 펼친다.
라는 것을 알게 되었습니다.

즉, 최대 30만의 길이를 갖는 diffs와 times를 스프레드 연산자를 이용하여 펼칠 경우
(환경에 따라 다르지만 일반적으로)약 10000~20000의 크기를 갖는 자바스크립트의 호출 스택 범위를 넘어가는 경우가 생기고

RangeError: Maximum call stack size exceeded

라는 런타임 에러가 발생하게 됩니다.

저는 이것을 해결하기 위해

// 해결 방법 1
let [left, right] = [1, 1]
diffs.forEach(item => {
  if(right < item) right = item
})

// 해결 방법 2
let [left, right] = [1, diffs.reduce((acc, cur) => Math.max(acc, cur), 1)]

와 같은 방법으로 대체하였습니다.

  • Kwon Hyunwoo

    하나 알아갑니다~!

    Kwon Hyunwoo―2024.09.10 13:23
  • 여창준

    그런 이유가 있었군요! 감사합니다!

    여창준―2024.09.30 15:17
  • kjkandrea

    감사합니다.

    kjkandrea―2024.10.25 14:16
  • Jeong-eun, Kim

    와, 감사합니다!

    Jeong-eun, Kim―2024.11.09 00:13
  • minyoung22222

    감사합니다~!

    minyoung22222―2025.02.05 17:46
  • okko8522@gmail.com

    와 감사합니다.. 바보같은 JS..

    okko8522@gmail.com―2025.03.14 09:31
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.