[Programmers] 입국심사 - Python
Programmers '입국심사' 문제 풀이를 정리했습니다.
2024-11-19조회수 -
PythonAlgorithm
풀이
시간이 기준이 아니라, 사람 수가 기준 사람 수(n)를 만족하는 시간의 최솟값 찾기
가능한 시간의 범위에서 이진 탐색, 끝 값은 가장 오래 걸리는 심사관이 모든 인원을 심사하는 경우
passenger += mid // x통과하는 사람 수: 최대한 심사관이 계속 심사하는 경우, 시간을 추가하면서 가능한 심사관을 고려하지 않고, 시간을 줄이면서 가능한 사람 수를 고려passenger >= n사람 수 n을 만족하면서, 최솟값이 아닐 수 있으므로 계속 범위를 좁혀주기
코드
def solution(n, times):
# 심사시간 정렬
times.sort()
answer = 0
# 시작, 끝 값 설정
start = 1
end = n*times[-1]
# 조건에 맞는 값 찾기 (이진탐색)
while start <= end:
mid = (start + end) // 2
passenger = 0
for x in times:
passenger += mid // x
# 반복 중 조건 불만족 시 반복 중지
if passenger > n:
break
if passenger >= n:
answer = mid
end = mid-1
else:
start = mid+1
return answer출처: 프로그래머스 코딩 테스트 연습 https://school.programmers.co.kr/learn/courses/30/lessons/43238