Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ด๋ถ„ํƒ์ƒ‰ - ์ž…๊ตญ์‹ฌ์‚ฌ (level.3)

๊ฐ์ž ๐Ÿฅ” 2021. 10. 7. 16:08
๋ฐ˜์‘ํ˜•

 

๋ฌธ์ œ๋งํฌ

 

๋‚˜์˜ ํ’€์ด

1. ์ด๋ถ„ํƒ์ƒ‰์ด๋ผ๊ณ  ์ฃผ์–ด์ง€์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ์—๋Š” ๋ชปํ’€์—ˆ์„ ํ™•๋ฅ ์ด ํฌ๋‹ค. 
2. ์ด๋ถ„ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ํ’€์—ˆ๋‹ค..... ์–ด๋ ต๋‹ค ใ… ใ…  

โ–ถ ํ’€์ด์„ค๋ช…

  1. ์ด๋ถ„ํƒ์ƒ‰์€ ํƒ์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ์—์„œ, ๊ฐ€์žฅ์ž‘์€๊ฐ’(left), ๊ฐ€์žฅํฐ๊ฐ’(right)๋กœ๋ถ€ํ„ฐ mid๊ฐ’์„ ์ฐพ๊ณ , mid๊ฐ’๊ณผ ๋น„๊ตํ•ด๋‚˜๊ฐ€๋ฉด์„œ ์ตœ์ ๊ฐ’์„ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  2. ํ•ด๋‹น ๋ฌธ์ œ์—์„  ๊ฐ€์žฅ ์ตœ์ ์˜์‹œ๊ฐ„์„ left, ๊ฐ€์žฅ ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ right๋กœ ๋‘๊ณ , ๋‘ ๊ฐ’์„ ๋”ํ•˜๊ณ  2๋กœ ๋‚˜๋ˆ„์–ด์ค€ ๊ฐ’์„ mid์‹œ๊ฐ„์œผ๋กœ ์ •ํ–ˆ๋‹ค. 
  3. mid์‹œ๊ฐ„์„ times ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ๊ฐ’๋“ค์„ ์‚ฌ์šฉํ•ด์„œ ๋‚˜๋ˆ„์–ด์ฃผ๋ฉด, ํ•ด๋‹น ๋ชซ์€ mid์‹œ๊ฐ„์— ์ฒ˜๋ฆฌํ• ์ˆ˜ ์žˆ๋Š” ์†๋‹˜์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋งŒ์•ฝ ์ด ์†๋‹˜์˜ ์ˆ˜๊ฐ€ n๋ณด๋‹ค ํฌ๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ์†๋‹˜์˜ ์ˆ˜๊ฐ€ n๋ณด๋‹ค ํฌ๋‹ค๋Š” ์˜๋ฏธ๋Š”, ์ œ์‹œ๋œ ์†๋‹˜์˜ ์ˆ˜(n)์„ ์ถฉ๋ถ„ํžˆ ์ผ€์–ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  4. ๋งˆ์ง€๋ง‰์— midํƒ€์ž„์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ์†๋‹˜์˜ ์ˆ˜๊ฐ€ n๋ณด๋‹ค ํฌ๋ฉด, ์‹œ๊ฐ„์ด ์ถฉ๋ถ„ํ•˜๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ, ๋” ์ž‘์€ ์‹œ๊ฐ„๋Œ€์—์„œ ์ตœ์ ์˜ ์‹œ๊ฐ„์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ answer๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๊ตฌํ•œ ์ตœ์ ์˜ ์ˆ˜์ธ mid๋กœ ๋ฐ”๊พธ์–ด์ฃผ๊ณ , right๊ฐ’์„ mid-1๋กœ ์ •ํ•ด์ฃผ์–ด ๋‹ค์‹œ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
  5. ๋งŒ์•ฝ midํƒ€์ž…์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ์†๋‹˜์˜ ์ˆ˜๊ฐ€ n๋ณด๋‹ค ์ž‘์œผ๋ฉด, midํƒ€์ž„์œผ๋กœ๋Š” ์†๋‹˜์„ ์ผ€์–ดํ• ์ˆ˜ ์—†๋‹ค๋Š” ๋œป์œผ๋กœ ํ•ด์„๋œ๋‹ค. ๋”ฐ๋ผ์„œ midํƒ€์ž„๋ณด๋‹ค ๋” ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„๋Œ€์—์„œ ์ตœ์ ์˜ ์‹œ๊ฐ„์„ ์ฐพ์•„์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์†Œ์‹œ๊ฐ„์œผ๋กœ ์ง€์ •๋˜์–ด์žˆ๋˜ left๊ฐ’์„ mid๋ฐ”๋กœ ์˜ค๋ฅธ์ชฝ๊ฐ’, mid+1 ๋กœ ์˜ฎ๊ฒจ์ฃผ๊ณ  ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
def solution(n, times):
    left = 1 #๊ฐ€์žฅ ํšจ์œจ์ ์ธ ์‹œ๊ฐ„์„ left์— ์ €์žฅ
    right = max(times) * n #๊ฐ€์žฅ ๋น„ํšจ์œจ์ ์ธ ์‹œ๊ฐ„์€ 60์ดˆ
    answer = 0

    while left <= right:
        # mid๊ฐ’์„ ๊ตฌํ•ด์ฃผ๊ณ , mid ๋ณด๋‹ค left๊ฐ€ ํฌ๋ฉด left๋ฅผ mid๋กœ ์„ค์ •ํ•˜๊ณ  ๋‹ค์‹œ ์ดˆ๋ฐ˜๋ถ€ํ„ฐ ๋ฐ˜๋ณต
        mid = (left+right) // 2 
        #mid time๋™์•ˆ ์–ผ๋งˆ๋งŒํผ์˜ ์†๋‹˜์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€ people ๋ณ€์ˆ˜์— ์ €์žฅ
        people = 0 

        for t in times:
            people += mid//t
            if people >= n :
                break

        # ๋งŒ์•ฝ mid์‹œ๊ฐ„์•ˆ์•  ์ฒ˜๋ฆฌํ•˜๋Š” ์†๋‹˜์˜ ์ˆ˜๊ฐ€ n๋ณด๋‹ค ํฌ๋ฉด mid ๋ณด๋‹ค ์ž‘์€ ๊ณต๊ฐ„์—์„œ ์ตœ์  ์ˆ˜๋ฅผ ์ฐพ์•„์•ผํ•˜๋ฏ€๋กœ
        if people >= n:
            answer = mid
            right = mid -1
        #๋งŒ์•ฝ mid์‹œ๊ฐ„์•ˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ์†๋‹˜์˜ ์ˆ˜๊ฐ€ n๋ณด๋‹ค ์ž‘์œผ๋ฉด mid๋ณด๋‹ค ํฐ ์‹œ๊ฐ„๋Œ€์—์„œ ์ตœ์ ์ˆ˜๋ฅผ ์ฐพ์•„์•ผํ•˜๋ฏ€๋กœ left๋ฅผ ์˜ฎ๊ฒจ์คŒ
        elif people < n:
            left = mid + 1

    return answer

 

๋‹ค๋ฅธ์‚ฌ๋žŒํ’€์ด

๊ฐ€์žฅ ์ข‹์•„์š”๋ฅผ ๋งŽ์ด ๋ฐ›์€ ํ’€์ด๋„ ๋‚˜์ฒ˜๋Ÿผ ํ‘ผ ์ด๋ถ„ํƒ์ƒ‰ํ˜• ํ’€์ด์˜€๋‹ค. ์ด๋ถ„ํƒ์ƒ‰์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ๋” ์ž์„ธํ•˜๊ฒŒ ๊ณต๋ถ€๋ฅผ ํ•ด๋ณธ๋’ค ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ํ’€์–ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค. ๊ผญ ,,, ๋งž์ถ”์ž 

๋ฐ˜์‘ํ˜•