프로그래머스 입국심사 (파이썬, javascript, 이분탐색)

728x90
반응형

l, r은 시간 기준이며 모든 사람이 다 처리될 수 있는 최소 시간을 구해준다

mid(기준 시간)을 각 줄에서 처리할 수 있는 시간으로 나눠주면 전체 처리된 인원 수가 나오게 된다 

1. 파이썬

def solution(n, times):
    l=min(times)*n//len(times)
    r=max(times)*n//len(times)
    answer=r
    while l<=r:
        mid=(l+r)//2
        sum=0
        for t in times:
            sum+=mid//t
        if sum>=n:
            if answer>mid:
                answer=mid
            r=mid-1
        else:
            l=mid+1
    return answer

2. javascript

  사람 수가 n보다 큰 경우도 시간을 갱신하는 조건이다. 

  가장 오래는 걸리는 시간을 right으로 해서 전체 시간을 각 시간으로 나눠준 것으로 사람 수를 계산한다.

function solution(n, times) {
    
    times.sort((a,b)=>a-b);
    let left=0,right=times[times.length-1]*n;
    var answer=times[times.length-1]*n;
    while(left<=right){
        let mid=parseInt((left+right)/2);
        let cnt=0;
        for(let i=0;i<times.length;i+=1){
            cnt+=parseInt(mid/times[i]);
        }
        if(cnt>=n){// 사람수가 많음. 시간을 줄여야한다.
            if(answer>mid){
                answer=mid;
            }
            right=mid-1;
        }else{// 시간 늘리기
            left=mid+1;
        }
    }
    return answer;
}
728x90
반응형
TAGS.

Comments