[프로그래머스] 43238. 입국심사

1 분 소요

문제 링크

[프로그래머스] 43238. 입국심사


풀이 과정

이분탐색 문제입니다. 기준 범위 내에서 입국심사 시간을 반으로 줄여가며 n명의 사람을 수용할 수 있는지 확인합니다.


const MAX = times.sort((a, b) => b - a)[0] * n;

심사대에서 한 명을 심사하는 데 걸리는 시간의 최대값에 n을 곱하여, 최대로 걸릴 수 있는 시간을 MAX에 담아둡니다.


while (low <= high) {
  let mid = parseInt((low + high) / 2);
  let cnt = 0;

  for (let time of times) cnt += parseInt(mid / time);

  if (cnt >= n) {
    answer = mid;
    high = mid - 1;
  } else low = mid + 1;
}

반으로 나눈 시간(mid)으로 심사를 진행했을 때 n 이상의 사람 수를 수용할 수 있다면, answer 변수에 저장해 두고, 상한을 내려서 더 적은 시간으로 입국심사를 진행해봅니다. mid 안에 n 명의 입국심사를 마칠 수 없다면, 더 큰 범위 내에서 조사해보기 위해 하한선을 올려줍니다.


코드

const solution = (n, times) => {
  const MAX = times.sort((a, b) => b - a)[0] * n;
  let low = 1,
    high = MAX;

  while (low <= high) {
    let mid = parseInt((low + high) / 2);
    let cnt = 0;

    for (let time of times) cnt += parseInt(mid / time);

    if (cnt >= n) {
      answer = mid;
      high = mid - 1;
    } else low = mid + 1;
  }

  return answer;
};

console.log(solution(6, [7, 10]));

카테고리:

업데이트:

댓글남기기