*모든 코드는 Javascript로 작성합니다.
*코드는 참고용으로만 봐주세요!
문제
https://programmers.co.kr/learn/courses/30/lessons/43238
코딩테스트 연습 - 입국심사
n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한
programmers.co.kr
해결방법
< 이분 탐색으로 해결 >
- (사람/카운터 개수)를 n이라 할 때,
- 이분 탐색의 최솟값은 가장 짧은 심사 시간 * n
- 이분 탐색의 최댓값은 가장 긴 심사 시간 * n
- 특정 시간 안에 모든 사람을 심사할 수 있는지 여부를 알려주는 함수를 작성하기
→ (총 소요 시간 / 각 카운터 심사 시간)은 한 카운터에서 총 소요 시간 동안 심사할 수 있는 사람 수.
→ 각 카운터에 대해 계산한 값을 모두 더했을 때, 그 값이 사람 수보다 크면 해당 시간 내에 심사 가능.
코드
function solution(n, times) { var counters = times.length; var min_time = Math.min(...times)*Math.floor(n/counters); var max_time = Math.max(...times)*Math.ceil(n/counters); var left = min_time - 1; * 최종적으로 right를 반환하기 때문에, 최솟값에서 1을 뺀 값으로 설정. var right = max_time; while (right - left > 1){ var mid = Math.floor((right+left)/2); if (isPossibleInTime(mid)){ right = mid; } else { left = mid; } } function isPossibleInTime(t){ var sum = 0; times.forEach((duration)=>{ sum += Math.floor(t/duration); }) if (sum >= n) return true; return false; } return right; } |
'Coding test > programmers' 카테고리의 다른 글
[프로그래머스] Lv.3 네트워크 (자바스크립트) (0) | 2022.07.01 |
---|---|
[프로그래머스] Lv.3 여행경로 (자바스크립트) (0) | 2022.06.30 |
[프로그래머스] Lv.3 디스크 컨트롤러 (자바스크립트) (0) | 2022.06.30 |