[프로그래머스] 입국심사 - javascript

Yongwoo Cho·2021년 10월 18일
0

알고리즘

목록 보기
18/104
post-thumbnail

📌 문제

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;
}

✔ 알고리즘 : 이분탐색

✔ 심사관마다 걸리는 시간인 times 배열 오름차순 정렬

✔ left=1, right= 제일오래걸리는 심사관한테 모두가 검사받는 시간

✔ 이분탐색을 진행하며 mid를 times[i]로 나눈값의 합이 현재 mid시간으로 검사할 수 있는 사람의 수이다.

✔ 사람의 수(cnt)가 n보다 큰 경우는 답에 맞는 조건이므로 answer과 비교하여 작으면 갱신

✔ 난이도 : 프로그래머스 기준 LEVEL 3

profile
Frontend 개발자입니다 😎

0개의 댓글