728x90
안녕하세요 코종입니다!
1일 1알고리즘이었는데 면접이다 뭐다 준비하느라..ㅎ 스킵이 되었던 날이 있네여
그래도 다시 시작합니다!
https://programmers.co.kr/learn/courses/30/lessons/43238
코딩테스트 연습 - 입국심사
n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한
programmers.co.kr
import Foundation
func solution(_ n:Int, _ times:[Int]) -> Int64 {
var left = 1
var right = times.max()! * n // 가장 오래 걸리는 경우 - 가장 오래걸리는데 n명
while left != right {
var mid: Int = (left + right) / 2 // 임시의 시간
var person: Int = 0 // 이 시간 내에 가능한 인원
for t in times {
person += mid / t // 가능 인원을 계산
}
if person >= n { // 가능하다면 -> 시간이 남는걸지도? -> right 내림
right = mid
} else { // 가능한 인원이 적다면 -> 시간이 적었다 -> left 올림
left = mid+1
}
}
return Int64(left)
}
처음에는 1부터(1은 너무 심했나..?) 시간을 1씩 올려가면서 가능한 시간이라면 return을 하는 방식으로 생각했는데요.
그렇게 되면 최악의 경우 모든 경우를 다 돌아야 하기 때문에 시간이 엄청 오래걸리더라구요.. (처음에는 그 생각을 못 함)
그래서 문제 카테고리인 이진탐색으로 풀게 되었습니다. 최대, 최소를 계속 조절해가며 적절한 시간을 찾는 방식이었는데요, 가능한 인원을 처음에 어떻게 계산해야하나 고민했는데 문제를 보고 찬찬히 생각해보니 생각보다 간단했습니다 ㅎㅎ
728x90
'알고리즘' 카테고리의 다른 글
[Swift 알고리즘] 백준 7562 - 나이트의 이동 (0) | 2022.03.30 |
---|---|
[Swift 알고리즘] 백준 6198 - 옥상 정원 꾸미기 (0) | 2022.03.27 |
[Swift 알고리즘] 프로그래머스 lv2 - k진수에서 소수 갯수 구하기 (0) | 2022.03.16 |
[Swift 알고리즘] 프로그래머스 lv2 - 주차 요금 계산 (0) | 2022.03.15 |
[Swift 알고리즘] 프로그래머스 lv1 - 신고 결과 받기 (0) | 2022.03.15 |