[JavaScript] 프로그래머스 입국심사 LEVEL3

문제출처

function solution(n, times) {
    var answer = 0;
    let left = 0;
    let right = 100000000000000;
    
    while (left <= right) {
        const mid = Math.floor((left + right) / 2);
        let sum = 0;
        
        for (const time of times) {
            sum += Math.floor(mid / time);
        }
        
        if (sum >= n) {
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    
    return left;
}

변수

  • right의 초기값 = 기다리는 사람수 * 심사위원수
  • mid : 모든 사람이 심사를 받는데 걸리는 시간 (return값 찾기)
  • sum : mid라는 시간동안 통과할 수 있는 사람 수

풀이

  • n = 6, 심사위원 = [7, 10] 이라고 하자
  • 현재 mid = 50이면
  • sum은 50 / 7 = 7 + 50 / 10 = 5 => 12로 50분동안 2명의 심사위원은 총 12명의 사람을 심사할 수 있다.
  • 12라는 값은 6보다 크기 때문에 right값을 줄여준다.
  • 이런식으로 left <= right 일때까지 left와 right값을 바꿔주고 최소값인 left를 return한다.

좋은 웹페이지 즐겨찾기