프로그래머스

프로그래머스_입국심사_JAVASCRIPT

o늘do 2020. 5. 7. 21:18

총 심사 시간은 1(left) ~ (최대로 오래걸리는 심사 * 대기인원)(right) 사이에있다.

이사이에서 문제 조건을 만족하는 최솟값을 구해야한다.

이분탐색으로 중간값인(mid) 시간((left + right) / 2) 을 먼저 정한다. 

이때 중간값(mid)을 각심사대의 시간(times[n])으로 나눠주고 그 몫들을 더해준다.

 

예시를 들면 대기인원이 6명 최소시간이 1분 최대시간이 60분 중간값이 30 분 이라하자,

이때 물어보는것이다 너희 각심사대 30분 동안 몇명씩 처리가능해 ? 

이때  각심사대의 심사시간 배열이 [7, 10] 이라면 첫번째 심사대는 4(30/7) 명처리 두번째는 3(30/10) 명이가능하다

그러면 총 7 명 처리할수 있다 . 이는 원래 대기인원보다 같거나 크므로 시간을 더줄일수있다는 것을 의미한다.

만약 대기인원보다 적게 처리가능하다면 시간을 너늘려야하는게 된다.

이와같은 방식으로 이분탐색 알고리즘을 처리하면 된다. 다음은 전체 코드이다.

 

function solution(n, times){
	times.sort((a, b) => {
		return a - b;})
    let left = 1;
    let right = n * (times[times.length - 1]);
    let answer = right;
    
    while(left <= right){
    	let mid = parseInt((left + right) / 2);
        let cnt = 0;
        times.forEach(value => {
        	cnt += parseInt(mid / value);
            if(cnt >= n){
            	answer = Math.min(answer , mid);
            }
        });
        if(cnt >= n){
			right = mid - 1;
        }
        else{
        	left = mid + 1;
        }
    }
    return answer
}

 

 

 

 

 

 

 

'프로그래머스' 카테고리의 다른 글

프로그래머스_스킬트리_자바  (0) 2020.05.17
프로그래머스_124 나라의 숫자_JAVA  (0) 2020.05.17
프로그래머스_섬연결하기  (0) 2020.05.07
프로그래머스_H-index  (0) 2020.05.07
프로그래머스_탑  (0) 2020.05.07