[프로그래머스] 입국심사

JIN·2021년 10월 8일
0

이진 탐색 문제 입니다.
왜냐하면 n 의 값이 1<= n <= 1,000,000,000이기 때문입니다.
1<= len(times)<= 100,000

  • 문제풀이전략
    answer 값을 mid 로 갱신하며 풉니다.
  1. 처음 answer 값은 right 값을 넣습니다.
    left = 0, right = max(times) * n
    mid = (left + right) // 2
  2. mid 시간에 셀 수 있는 각 time의 인원수를 더합니다.
  3. 인원수의 합이 n 보다 작으면 left를 mid +1 로 갱신하고 다시 ~ 이진탐색을 돌립니다.
  4. 아니면 , right = mid -1로 하고 answer이 mid 보다 크면
  5. mid를 answer로 변경해줍니다.
    그 후 , answer 을 return 해주면 됩니다.
def solution(n, times):
    left = 0
    answer = right = max(times) * n
    while left <= right:
        compare = 0
        mid = (left + right )// 2
        for i in times:
            compare += mid // i
        if compare < n:
            left = mid + 1
        else:
            right = mid -1
            if mid < answer:
                answer = mid
                
    return answer
profile
배우고 적용하고 개선하기

0개의 댓글

관련 채용 정보