프로그래머스

프로그래머스 입국심사 파이썬

hotchya 2021. 9. 16. 16:40

입국심사

https://programmers.co.kr/learn/courses/30/lessons/43238

문제 단순화

  • n 정수와 times 정수 리스트가 있다.
  • times의 각 요소는 한 사람을 처리하는 시간을 나타낸다.
  • times의 모든 요소를 사용하여 n명의 사람을 처리할 때, 걸리는 최소 시간을 리턴한다.

문제풀이

  • min(times)n, max(times)n을 최소값, 최댓값으로 둔다.
  • 걸리는 시간을 이분탐색하여, 결과를 리턴한다.

  • left, right 분기 조건에 주의한다.
  • 분기 조건이 이상, 이하일 때는 mid값을 준다. (결과가 mid일 경우가 있기 때문에)

코드

def solution(n, times):
    answer = 0
    left = min(times)
    right = max(times)*n
    while left < right:
        mid = (left+right)//2
        print(left,right,mid)
        num_complete = 0
        for time in times:
            num_complete += mid//time
        if num_complete < n:
            left = mid + 1
        else:
            right = mid
    answer = right
    return answer