ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

문제

 

SW Expert Academy

SW ν”„λ‘œκ·Έλž˜λ° μ—­λŸ‰ 강화에 도움이 λ˜λŠ” λ‹€μ–‘ν•œ ν•™μŠ΅ 컨텐츠λ₯Ό ν™•μΈν•˜μ„Έμš”!

swexpertacademy.com

 

문제 풀이

 Mλͺ…μ˜ μ‚¬λžŒμ΄ μž…κ΅­μ‹¬μ‚¬λ₯Ό λ°›μœΌλ €κ³  ν•  λ•Œ, μž…κ΅­ μ‹¬μ‚¬μ˜ μ†Œμš” μ‹œκ°„μ΄ μ΅œμ†Œκ°€ λ˜λŠ” μ‹œκ°„μ„ 좜λ ₯ν•˜λŠ” λ¬Έμ œμ΄λ‹€. 문제λ₯Ό ν’€κΈ° μœ„ν•΄μ„œλŠ” `이뢄 탐색`을 톡해, 심사가 κ°€λŠ₯ν•œ μ΅œμ†Œ μ‹œκ°„μ„ ꡬ할 수 μžˆλ‹€. 이 λ¬Έμ œμ—μ„œ 이뢄 νƒμƒ‰μ˜ `mid` 값은 μž…κ΅­ μ‹¬μ‚¬ν•˜λŠ”λ° μ†Œμš”λ˜λŠ” 전체 μ‹œκ°„μ„ μ˜λ―Έν•œλ‹€. 예λ₯Ό λ“€μ–΄ `mid`κ°€ 30초라면 30 // μ‹¬μ‚¬ν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„μ„ κ΅¬ν•˜κ²Œ 되면 μž…κ΅­ν•  수 μžˆλŠ” μ‚¬λžŒ μˆ˜κ°€ κ²°μ •λ˜κ²Œ λœλ‹€.

 

μ½”λ“œ

T = int(input())

for test_case in range(1, T + 1):
    answer = 0
    n, m = map(int, input().split())

    times = [int(input()) for _ in range(n)]
    left, right = 1, max(times) * m

    while left <= right:
        mid = (left + right) // 2
        people = sum([mid // time for time in times])

        if people >= m:
            answer = mid
            right = mid - 1
        else:
            left = mid + 1

    print('#' + str(test_case), answer)

 

728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€