[Programmers] μž…κ΅­μ‹¬μ‚¬

Updated:

μž…κ΅­μ‹¬μ‚¬

μž…κ΅­μ‹¬μ‚¬ λ₯Ό ν΄λ¦­ν•˜λ©΄ λ°”λ‘œ μ΄λ™ν•œλ‹€.


μ˜ˆμ „μ— 풀지 λͺ» ν–ˆλ˜ λ¬Έμ œμ˜€λ‹€. 이뢄탐색을 μ΄μš©ν•˜μ—¬ ν‘ΈλŠ” 문제인데 μ–΄λ–€ 것을 μ΄λΆ„νƒμƒ‰μœΌλ‘œ 찾을지 μ •ν•˜λŠ”κ²Œ μ€‘μš”ν•˜λ‹€.

λͺ¨λ“  μ‚¬λžŒμ΄ 심사λ₯Ό λ°›λŠ”λ° κ±Έλ¦¬λŠ” μ΅œμ†Œμ‹œκ°„μ„ κ΅¬ν•˜κ³ μž ν•˜λ‹ˆ 1λΆ„λΆ€ν„° μ΅œλŒ€ 심사 μ‹œκ°„κΉŒμ§€λ₯Ό κΈ°μ€€μœΌλ‘œ 작고 이뢄탐색을 ν•œλ‹€.

μ΅œλŒ€ 심사 μ‹œκ°„μ€ 심사 μ‹œκ°„μ΄ κ°€μž₯ κΈ΄ μ‹¬μ‚¬κ΄€μ—κ²Œ μ „λΆ€ 심사λ₯Ό λ°›μ„λ•Œ κ±Έλ¦¬λŠ” μ‹œκ°„μ΄λ‹€.

μ΅œλŒ€ 심사 μ‹œκ°„μ΄ 60λΆ„ 이라면 κ·Έ 쀑간인 30뢄을 ν™•μΈν•œλ‹€.

30뢄인 경우 μ‹¬μ‚¬μ‹œκ°„μ΄ 7뢄인 심사관은 4λͺ…을 심사 ν•  수 있고 10뢄인 심사관은 3λͺ…을 심사 ν•  수 μžˆλ‹€.

μš°λ¦¬κ°€ 심사받아야 ν•  전체 인원은 6λͺ…이기 λ•Œλ¬Έμ— 30λΆ„μœΌλ‘œ λͺ¨λ“  인원이 심사가 κ°€λŠ₯ν•˜λ‹€.

λ”°λΌμ„œ 1λΆ„κ³Ό 30λΆ„μ˜ 쀑간인 15뢄을 ν™•μΈν•œλ‹€.

μ΄λ ‡κ²Œ 이뢄탐색을 ν•˜λ©΄ λͺ¨λ“  인원을 심사 ν•  수 μžˆλŠ” μ΅œμ†Œ μ‹œκ°„μ„ ꡬ할 수 μžˆλ‹€.


def solution(n, times):
    start = 1
    end = max(times) * n
    answer = 0

    while start <= end:
        mid = (start + end) // 2
        total_person = 0
        for time in times:
            total_person += mid // time

        if n <= total_person:
            answer = mid
            end = mid - 1
        else:
            start = mid + 1

    return answer


if __name__ == "__main__":
    n = 6
    times = [7, 10]
    print(solution(n, times))



Categories:

Updated:

Leave a comment