left = 1, right = Math.max(...times) * n
↓
mid = (start + end) / 2
↓
mid분 동안 처리할 수 있는 사람 수 계산
↓
처리 가능 인원 >= n -> end = mid
처리 가능 인원 < n -> start = mid + 1
↓
start와 end가 같아질 때까지 반복
Step 3: 코드 설계
최소/최대 시간 설정
이진 탐색으로 시간 탐색
주어진 시간에 처리 가능한 인원 계산하는 함수 구현
결과값 도출
Step 4: 코드 구현
function solution(n, times) {
// 최소 시간과 최대 시간 설정
let start = 1;
let end = Math.max(...times) * n;
// 주어진 시간(mid)동안 처리할 수 있는 입국자 수 계산 함수
const getPossibleCount = (mid) => {
return times.reduce((acc, time) => acc + Math.floor(mid / time), 0);
};
// 이진 탐색
while (start < end) {
const mid = Math.floor((start + end) / 2);
const possibleCount = getPossibleCount(mid);
// 처리할 수 있는 인원이 n보다 크거나 같으면 시간을 줄여본다
if(possibleCount >= n) {
end = mid;
} else {
// 처리할 수 있는 인원이 n보다 작으면 시간을 늘린다
start = mid + 1
}
}
return start;
}
// 테스트
console.log(solution(6, [7, 10])); // 28
입국심사
📝 제약조건
💡 예시
문제 해결 과정
Step 1: 문제 이해하기
Step 2: 접근 방법
이진 탐색으로 접근
알고리즘 표
Step 3: 코드 설계
Step 4: 코드 구현