코딩테스트/프로그래머스
[프로그래머스] 입국심사
쪼르뚜
2024. 10. 26. 02:24
728x90
반응형
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/43238
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
반응형
728x90
👩💻 코드
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
long long solution(int n, vector<int> times) {
long long left = 1;
long long right = *max_element(times.begin(), times.end()) * (long long)n;
long long answer = right;
while (left <= right) {
long long mid = (left + right) / 2;
long long people = 0;
for (int time : times) {
people += mid / time;
if (people >= n) {
break;
}
}
if (people >= n) {
answer = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return answer;
}
📝 풀이
left는 최소 시간 right는 최대 시간(모든 사람이 가장 오래 걸리는 심사대로 심사 받는 시간)으로 설정합니다.
현재 시간 mid에서 모든 심사대에서 mid / time의 사람을 처리할 수 있는지 계산합니다.
필요한 인원을 충족하면 더 계산 할 필요가 없으니 break 처리를 합니다.
모든 사람을 심사 할 수 있다면 시간을 줄이기 위해 범위를 줄입니다.
그렇지 않다면 모든 사람을 심사 하기 위해 범위를 늘립니다.
최종적으로 최소 시간으로 저장되어 있는 answer을 return 합니다.
728x90
반응형