Algorithm/programmers/이분 탐색/level3/입국심사 (with python)

yellow·2021년 6월 9일
0

알고리즘 문제

목록 보기
28/58

📖 문제

📝 풀이과정

  제한사항에 있는 최댓값들을 보면 선형 탐색으로는 절대 제한시간 안에 문제를 풀 수가 없다는 것을 알 수 있다. -> 이진 탐색을 사용하자!
구하고자 하는 값 : 모든 사람이 심사를 받는데 걸리는 시간의 최솟값
  모든 사람들이 가장 오래걸리는 심사대에서 심사를 받는 경우(max(times) * n)가 최악의 경우이기 때문에 끝값으로 두고, 시작값은 간편하게 0으로 두었다.
  ❗주의할 점은 이진 탐색의 경우에는 내가 찾고자 하는 값을 얻게 되면 바로 그 값이 정답이 되지만 이 문제의 경우에는 "최솟값" 을 찾는 것이기 때문에 조건을 만족하는 값을 얻게 되더라도 더 작은 수로도 조건을 만족하는 값이 있는지 찾아야 한다는 것이다.

⌨ 코드

def solution(n, times):
    answer = 0
    # 시작값(i)과 끝값(j) 설정
    i,j = 0, max(times) * n
    
    # 이진 탐색 시작
    while i <= j:
        m = (i + j) // 2
        # tmp_n : m분동안 심사를 받을 수 있는 사람의 수를 담는다.
        tmp_n = 0
        for time in times:
            tmp_n += (m//time)
        # m분동안 심사를 받을 수 있는 사람 수가 n보다 크거나 같다면(조건 만족)
        if n <= tmp_n:
            answer = m
            j = m - 1
        else:
            i = m + 1
    return answer
profile
할 수 있어! :)

0개의 댓글