https://school.programmers.co.kr/learn/courses/30/lessons/43238
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
각 심사관이 한 사람을 심사하는데 걸리는 시간을 알 때, 모든 사람(n)을 심사하는데 걸리는 시간을 최소화 하고 싶다.
이분 탐색을 활용해서 간단히 답을 찾을 수 있다.
1. 정답(최소 시간)을 가정하여, 해당 시간 동안 심사관이 각각 검사할 수 있는 입국자 수를 카운트한다.
2. 카운트 한 값이 입국자 수보다 작다면 시간이 부족하다는 뜻이므로 start = mid+1 이다.
3. 반대로 카운트 한 값이 입국자 수보다 크다면 시간이 많았다는 뜻이므로 end = mid-1이다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
long long solution(int n, vector<int> times) {
long long answer = 0;
sort(times.begin(), times.end());
long long start = 1; // minimum time
long long end = (long long) times[times.size()-1] * n; // maximum time
while (start <= end) {
long long mid = (start + end) /2; // 정답을 가정
long long cnt = 0;
// 가정한 시간 동안 심사할 수 있는 사람 수는?
for (int i = 0; i < times.size(); i++) {
cnt += mid / times[i];
}
if (cnt < n)
start = mid + 1;
else {
if (mid <= end)
answer = mid;
end = mid - 1;
}
}
return answer;
}
'프로그래머스 > Lv.3' 카테고리의 다른 글
[C++] 프로그래머스 등대 (0) | 2023.03.01 |
---|---|
[C++] 프로그래머스 코딩테스트 공부 (0) | 2023.02.28 |
[C++] 프로그래머스 합승 택시 요금 - 플로이드 와샬/다익스트라 (0) | 2023.02.14 |
[C++] 프로그래머스 디스크 컨트롤러 (0) | 2023.02.13 |
[C++] 프로그래머스 미로 탈출 명령어 (0) | 2023.02.13 |