자바스크립트 표준(ECMAScript)에는 함수 호출 시 인자의 개수에 대해 명시적인 제한이 없지만, 일부 엔진(예: V8)에서는 내부 구현상 함수 호출 시 인자의 개수를 저장하거나 처리하는 방식에 제한이 있을 수 있다.
보통 16비트 정수를 인자 개수로 사용하기 때문에 65536(= 2¹⁶)개 이상의 인자를 처리하려 할 경우 런타임 에러가 발생할 수 있다.
아래 문제를 풀다가 의도치 않게 알게 되었다.
https://school.programmers.co.kr/learn/courses/30/lessons/340212
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
function getMaxDiff(diffs){
let maxDiff=1;
for(const diff of diffs){
maxDiff=Math.max(maxDiff,diff);
}
return maxDiff;
}
function solution(diffs, times, limit) {
/*
JavaScript 엔진에서는 함수 호출 시 최대 65535개의 인자 제한이 있다.
diffs의 최대 길이는 30만이므로 Math.max 함수로 최대 난이도를 구하려 할 경우 런타임 에러가 발생할 수 있다.
*/
//const maxDiff=Math.max(...diffs);
const maxDiff=getMaxDiff(diffs);
const ableToSolve=(level)=>{
let totalTime=0;
for(let i=0;i<diffs.length;++i){
const [diff,time_cur,time_prev]=[diffs[i],times[i],i>0?times[i-1]:0];
if(level>=diff) totalTime+=time_cur;
else totalTime+=(diff-level) * (time_cur + time_prev) + time_cur;
if(totalTime>limit) return false;
}
return totalTime<=limit;
}
// 이분 탐색
let [left,right]=[1,maxDiff];
while(left<=right){
const mid=Math.floor((left+right)/2);
if(ableToSolve(mid)) right=mid-1;
else left=mid+1;
}
return left;
}
'Javascript' 카테고리의 다른 글
자바스크립트의 프로토타입에 대한 철학적인 접근 (0) | 2024.05.16 |
---|