문제풀이/이분탐색

[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)를 이용하여 풀었다.