문제풀이/이분탐색
[Javascript/자바스크립트] (프로그래머스) [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지
딜레이레이
2025. 5. 15. 16:16
https://school.programmers.co.kr/learn/courses/30/lessons/340212
코드
function solution(diffs, times, limit) {
let answer = 0;
const check = (level) => {
const requireTime = [times[0]];
for (let i = 1; i < diffs.length; i++) {
const gap = diffs[i] - level;
requireTime.push(times[i]);
if (gap > 0) {
const len = requireTime.length;
requireTime[len - 1] += gap * (times[i] + times[i - 1]);
}
}
const total = requireTime.reduce((acc, cur) => acc + cur, 0);
return total <= limit;
};
let [l, r] = [1, Number.MAX_SAFE_INTEGER];
while (l <= r) {
const mid = Math.floor((l + r) / 2);
if (check(mid)) {
r = mid - 1;
answer = mid;
} else {
l = mid + 1;
}
}
return answer;
}
특정 조건을 만족하는 최솟값을 구하는 문제이기 때문에 파라메트릭 서치(Parametric Search)를 이용하여 풀었다.