ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ž…๊ตญ์‹ฌ์‚ฌ

n๋ช…์ด ์ž…๊ตญ์‹ฌ์‚ฌ๋ฅผ ์œ„ํ•ด ์ค„์„ ์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ž…๊ตญ์‹ฌ์‚ฌ๋Œ€์— ์žˆ๋Š” ์‹ฌ์‚ฌ๊ด€๋งˆ๋‹ค ์‹ฌ์‚ฌํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ฒ˜์Œ์— ๋ชจ๋“  ์‹ฌ์‚ฌ๋Œ€๋Š” ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ์‹ฌ์‚ฌ๋Œ€์—์„œ๋Š” ๋™์‹œ์— ํ•œ

programmers.co.kr

 

๋ฌธ์ œ ํ’€์ด

 n๋ช…์ด ์ž…๊ตญ์‹ฌ์‚ฌ๋ฅผ ํ•˜๋Š”๋ฐ ์‹ฌ์‚ฌ๋Œ€์— ๋”ฐ๋ผ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด๋•Œ ์‹ฌ์‚ฌ ๋Œ€๋งˆ๋‹ค ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ๊ฐ๊ธฐ ๋‹ค๋ฅด๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋ถ„๋ฅ˜์™€ ๊ฐ™์ด `์ด๋ถ„ ํƒ์ƒ‰`์œผ๋กœ ํ’€์–ด์•ผ ์‹œ๊ฐ„ ๋‚ด์— ํ†ต๊ณผ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, `๋ชจ๋‘ ์ž…๊ตญํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ // ๊ฐ ์‹ฌ์‚ฌ๋Œ€๋ณ„ ์‹ฌ์‚ฌ์‹œ๊ฐ„ = ์ž…๊ตญ์ž ์ˆ˜`๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ง€๋ฅผ ์ฐพ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— `์ด๋ถ„ ํƒ์ƒ‰`์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ํ•œ๋‹ค.

 

 `์ด๋ถ„ ํƒ์ƒ‰`์—์„œ๋Š” `left`, `right`๋ฅผ ์„ค์ •ํ•˜์—ฌ์•ผ ํ•˜๋Š”๋ฐ ์ด๋Š” ๊ฐ€์žฅ ์งง๊ฒŒ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ 1๊ณผ, ๋ชจ๋“  ์ž…๊ตญ์ž๋“ค์ด ๊ฐ€์žฅ ํฐ ์‹ฌ์‚ฌ๋Œ€๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๊ฒฝ์šฐ `์ž…๊ตญ์ž ์ˆ˜ * max(times)`๋กœ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

์ฝ”๋“œ

def solution(n, times):
    answer = 0

    length = len(times)
    left = 1
    right = (length + 1) * max(times)

    while left <= right:
        mid = (left + right) // 2

        cnt = 0
        for time in times:
            cnt += mid // time

        if cnt >= n:
            answer = mid
            right = mid - 1
        else:
            left = mid + 1

    return answer

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€