https://programmers.co.kr/learn/courses/30/lessons/43238
코딩테스트 연습 - 입국심사
n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한
programmers.co.kr
코드 설명
시간 이라는 개념을 이분탐색으로 찾아야 한다는게 포인트이다.
최소값은 1분 ~ 최대값은 times가 가진 최대 시간 * n(사람수) 이다.
그 후, mid시간 동안 몇명을 검사 할수 있는지 cnt를 통해 구한다. ( 구하는 법은 시간/times[i])
또한 최대값을 설정할때 long long 설정에 유의하자!
long long endd=n*(long long)times[k-1];
코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
long long solution(int n, vector<int> times) {
long long answer = 0;
//입국심사 사람 1,000,000,000 => longlong 이분탐색 생각!
sort(times.begin(),times.end());
long long k=times.size();
long long startt=1;
long long endd=n*(long long)times[k-1];
long long cnt=0;
while(startt <= endd){
long long midd=(startt+endd)/2;
cnt=0;
for(int i=0;i<k;i++){
cnt += midd/times[i]; //시간당 심사인원한명이 심사할수 있는 인원수 합
}
if(cnt<n){ // 불가능
startt = midd+1;
}
else{ //가능
//최소시간 구하기
answer=midd;
endd=midd-1;
}
}
return answer;
}
'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 더 맵게 (0) | 2021.05.01 |
---|---|
[프로그래머스] 프린터 (0) | 2021.04.30 |
[프로그래머스] 기능개발 (0) | 2021.04.30 |
[프로그래머스] 타겟넘버 (0) | 2021.04.27 |
[프로그래머스] H-Index (0) | 2021.04.27 |