프로그래머스 입국심사 (파이썬, 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
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 짝지어 제거하기 (파이썬, javascript) (0) | 2020.09.16 |
---|---|
프로그래머스 순위 (파이썬, set) (0) | 2020.09.11 |
프로그래머스 가장 먼 노드 (파이썬, bfs) (0) | 2020.09.11 |
프로그래머스 단속카메라 (그리디, 파이썬) (0) | 2020.09.11 |
디스크 컨트롤러 (파이썬) (0) | 2020.09.10 |
TAGS.