programmers.co.kr/learn/courses/30/lessons/43238
코딩테스트 연습 - 입국심사
n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한
programmers.co.kr
[문제 풀이]
이분탐색을 이용하여 문제를 풀었습니다.
이 문제는 n명의 사람이 입국 심사를 모두 마치는 데 걸리는 최소시간을 구하는 문제입니다. n과 times의 범위가 크기 때문에 완전 탐색으로는 해결이 어려우므로 이분탐색을 이용하여 해결하였습니다.
문제의 로직은 최소시간과 최대시간(가장 오래 걸리는 입국 심사관 * n)의 값의 중간을 찾아 중간시간 안에 몇 명의 심사관이 심사할 수 있는지를 확인하는 것입니다.
[코드]
#include <string>
#include <vector>
#include<algorithm>
using namespace std;
long long solution(int n, vector<int> times) {
sort(times.begin(), times.end());
long long minTime = 0;
long long maxTime = times[times.size() - 1] * (long long)n;
long long answer = maxTime;
while(minTime <= maxTime){
long long midTime = (minTime + maxTime) / 2;
long long done = 0;
for(int item : times)
done += midTime/item;
if(done < n){
minTime = midTime + 1;
}
else {
if(midTime <= answer)
answer = midTime;
maxTime = midTime - 1;
}
}
return answer;
}
'algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스_네트워크(C++) (0) | 2020.10.21 |
---|---|
프로그래머스_타겟 넘버(C++, JAVA) (0) | 2020.10.21 |
프로그래머스_문자열 압축(C++) (0) | 2020.06.04 |
프로그래머스_카펫(C++, JAVA) (0) | 2020.04.28 |
프로그래머스_등굣길(C++, JAVA) (0) | 2020.04.26 |