[프로그래머스] 43238. 입국심사
문제 링크
풀이 과정
이분탐색 문제입니다. 기준 범위 내에서 입국심사 시간을 반으로 줄여가며 n명의 사람을 수용할 수 있는지 확인합니다.
const MAX = times.sort((a, b) => b - a)[0] * n;
심사대에서 한 명을 심사하는 데 걸리는 시간의 최대값에 n을 곱하여, 최대로 걸릴 수 있는 시간을 MAX에 담아둡니다.
while (low <= high) {
let mid = parseInt((low + high) / 2);
let cnt = 0;
for (let time of times) cnt += parseInt(mid / time);
if (cnt >= n) {
answer = mid;
high = mid - 1;
} else low = mid + 1;
}
반으로 나눈 시간(mid)으로 심사를 진행했을 때 n 이상의 사람 수를 수용할 수 있다면, answer 변수에 저장해 두고, 상한을 내려서 더 적은 시간으로 입국심사를 진행해봅니다. mid 안에 n 명의 입국심사를 마칠 수 없다면, 더 큰 범위 내에서 조사해보기 위해 하한선을 올려줍니다.
코드
const solution = (n, times) => {
const MAX = times.sort((a, b) => b - a)[0] * n;
let low = 1,
high = MAX;
while (low <= high) {
let mid = parseInt((low + high) / 2);
let cnt = 0;
for (let time of times) cnt += parseInt(mid / time);
if (cnt >= n) {
answer = mid;
high = mid - 1;
} else low = mid + 1;
}
return answer;
};
console.log(solution(6, [7, 10]));
댓글남기기