혹시 코드에 ...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)]
와 같은 방법으로 대체하였습니다.
하나 알아갑니다~!
그런 이유가 있었군요! 감사합니다!
감사합니다.
와, 감사합니다!
감사합니다~!
와 감사합니다.. 바보같은 JS..