📖 문제
🧑🏻💻 풀이 과정
1) 문제 접근 및 이해
특정 시간 내에 인원을 모두 심사가 가능한지 여부 판별을 위해 이분 탐색을 이용하였습니다.
시간을 기준으로 필요한 최소 시간과 최대 시간을 우선적으로 구한 이후, 최소 시간을 탐색했습니다.
중간 시간을 적용하여 n명 이상 심사가 가능하면, 더 적은 시간으로 가능한지 탐색하였습니다.
n명 심사가 불가능하다면, 더 많은 시간을 적용하여 탐색하였습니다.
2) 알고리즘
- 이분탐색
3) 풀이 코드
사용 언어 - JavaScript
function solution(n, times) {
let answer = 0 // 정답 변수
let min_time = 1 // 심사를 모두 마치는 최소 시간
let max_time = n * Math.max(...times) // 심사를 모두 마치는 최대 시간
while (min_time <= max_time) { // 이분 탐색
const mid = parseInt((min_time + max_time) / 2) // 최소와 최대의 중간 값
let people = 0 // 현재 시간에서 심사 가능한 인원
times.forEach(t => people += parseInt(mid / t)) // 심사관별로 해당 시간에 심사 가능한 인원 누적
if (people >= n) { // n명 이상 심사 가능하면
answer = mid // 현재 시간 기록
max_time = mid - 1 // 더 적은 시간으로 심사 가능한지 탐색
} else { // 모두 심사 불가능하면
min_time = mid + 1 // 더 많은 시간으로 심사 가능한지 탐색
}
}
return answer
}
🔗 문제 링크
- https://programmers.co.kr/learn/courses/30/lessons/43238?language=javascript
※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다
'알고리즘 문제풀이 > JavaScript' 카테고리의 다른 글
[프로그래머스] 추석트래픽 (0) | 2022.05.24 |
---|---|
[프로그래머스] 단어 변환 (0) | 2022.05.13 |
[프로그래머스] 짝지어 제거하기 (0) | 2022.05.09 |
[프로그래머스] 네트워크 (0) | 2022.05.05 |
[프로그래머스] 타겟 넘버 (0) | 2022.05.05 |
댓글