[プログラマー]入国審査-javascript


📌 質問する


https://programmers.co.kr/learn/courses/30/lessons/43238

📌 に答える

function solution(n, times) {
  var answer = Infinity;
  times = times.sort((a, b) => a - b); // 오름차순 정렬
  let left = 1;
  let right = times[times.length - 1] * n;

  // 이분탐색 시작
  while (left <= right) {
    let cnt = 0;
    let mid = parseInt((left + right) / 2);
    // 조건에 맞는 mid인지 검사
    for (let i = 0; i < times.length; i++) {
      cnt += parseInt(mid / times[i]);
    }
    if (cnt >= n) {
      right = mid - 1;
      answer = Math.min(answer, mid);
    } else {
      left = mid + 1;
    }
  }
  return answer;
}
✔アルゴリズム:二分探索
✔審査官ごとに所要時間の時間を昇順に並べ替える
✔left=1,right=全員が最長時間の審査官検査を受ける時間
✔二分探索を行い、midをtimes[i]の値の和で割ったのが現在のmid時間でチェックできる人数です.
✔人の数がnより多い場合は答えに合う条件ですが、答えより小さい場合は更新します
✔難易度:プログラマー標準LEVEL 3