๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์Šคํ„ฐ๋”” 6์ฃผ์ฐจ] ์ด๋ถ„ํƒ์ƒ‰ ์ž…๊ตญ์‹ฌ์‚ฌ Lv.3 - ํŒŒ์ด์ฌ(Python)

๐Ÿ“‘ ๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/43238

 

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

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

programmers.co.kr

๋”๋ณด๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

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

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

๋ชจ๋“  ์‚ฌ๋žŒ์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ตœ์†Œ๋กœ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ž…๊ตญ์‹ฌ์‚ฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‚ฌ๋žŒ ์ˆ˜ n, ๊ฐ ์‹ฌ์‚ฌ๊ด€์ด ํ•œ ๋ช…์„ ์‹ฌ์‚ฌํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๋‹ด๊ธด ๋ฐฐ์—ด times๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์˜ ์ตœ์†Ÿ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ์ž…๊ตญ์‹ฌ์‚ฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‚ฌ๋žŒ์€ 1๋ช… ์ด์ƒ 1,000,000,000๋ช… ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ฐ ์‹ฌ์‚ฌ๊ด€์ด ํ•œ ๋ช…์„ ์‹ฌ์‚ฌํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ 1๋ถ„ ์ด์ƒ 1,000,000,000๋ถ„ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์‹ฌ์‚ฌ๊ด€์€ 1๋ช… ์ด์ƒ 100,000๋ช… ์ดํ•˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

n/ times/ return

6 [7, 10] 28

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

๊ฐ€์žฅ ์ฒซ ๋‘ ์‚ฌ๋žŒ์€ ๋ฐ”๋กœ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์œผ๋Ÿฌ ๊ฐ‘๋‹ˆ๋‹ค.

7๋ถ„์ด ๋˜์—ˆ์„ ๋•Œ, ์ฒซ ๋ฒˆ์งธ ์‹ฌ์‚ฌ๋Œ€๊ฐ€ ๋น„๊ณ  3๋ฒˆ์งธ ์‚ฌ๋žŒ์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

10๋ถ„์ด ๋˜์—ˆ์„ ๋•Œ, ๋‘ ๋ฒˆ์งธ ์‹ฌ์‚ฌ๋Œ€๊ฐ€ ๋น„๊ณ  4๋ฒˆ์งธ ์‚ฌ๋žŒ์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

14๋ถ„์ด ๋˜์—ˆ์„ ๋•Œ, ์ฒซ ๋ฒˆ์งธ ์‹ฌ์‚ฌ๋Œ€๊ฐ€ ๋น„๊ณ  5๋ฒˆ์งธ ์‚ฌ๋žŒ์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

20๋ถ„์ด ๋˜์—ˆ์„ ๋•Œ, ๋‘ ๋ฒˆ์งธ ์‹ฌ์‚ฌ๋Œ€๊ฐ€ ๋น„์ง€๋งŒ 6๋ฒˆ์งธ ์‚ฌ๋žŒ์ด ๊ทธ๊ณณ์—์„œ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์ง€ ์•Š๊ณ  1๋ถ„์„ ๋” ๊ธฐ๋‹ค๋ฆฐ ํ›„์— ์ฒซ ๋ฒˆ์งธ ์‹ฌ์‚ฌ๋Œ€์—์„œ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์œผ๋ฉด 28๋ถ„์— ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ์‹ฌ์‚ฌ๊ฐ€ ๋๋‚ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ์‹ฌ์‚ฌ๊ด€์ด ์‹ฌ์‚ฌํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ „์ฒด ์‹œ๊ฐ„์„ ์ด๋ถ„ํƒ์ƒ‰ ํ•ด๋‚˜๊ฐ€๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

โ—ป๏ธ ์ฒ˜์Œ์—๋Š” ๊ฐ€์žฅ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„(์‹ฌ์‚ฌ๋ฅผ ๊ฐ€์žฅ ์˜ค๋ž˜ํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋ชจ๋“  ์ธ์›์„ ์‹ฌ์‚ฌํ•œ๋‹ค๊ณ  ํ•  ๋•Œ)์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜์—ฌ, ๋ฃจํ”„๋ฅผ ๋Œ ๋•Œ๋งˆ๋‹ค low/high ๋ฅผ ์ขํ˜€๊ฐ€๋ฉฐ ์กฐ์ ˆํ•œ๋‹ค.

โ—ป๏ธ ๊ฐ ์‹ฌ์‚ฌ์›๋งˆ๋‹ค ๊ธฐ์ค€์‹œ๊ฐ„ ๋™์•ˆ ๋ช‡ ๋ช…์„ ์‹ฌ์‚ฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€(๊ธฐ์ค€์‹œ๊ฐ„//์‹ฌ์‚ฌ์‹œ๊ฐ„) ์ด ํ•ฉ์„ ๊ตฌํ•œ๋‹ค.

โ—ป๏ธ ํ•ฉ์ด n๋ณด๋‹ค ๋งŽ์œผ๋ฉด, ๊ธฐ์ค€ ์‹œ๊ฐ„ ์•ˆ์— ๋ชจ๋“  ์ด๋ฅผ ์ถฉ๋ถ„ํžˆ ์‹ฌ์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ์ตœ์ ์˜ ์‹œ๊ฐ„์„ ์œ„ํ•ด high๋ฅผ ์ขํ˜€์„œ ๋‹ค์‹œ ํƒ์ƒ‰ํ•ด๋ณธ๋‹ค.

โ—ป๏ธ ํ•ฉ์ด n๋ณด๋‹ค ์ž‘์œผ๋ฉด, ๊ธฐ์ค€ ์‹œ๊ฐ„๋™์•ˆ ๋ชจ๋“  ์ด๋ฅผ ์‹ฌ์‚ฌํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ low๋ฅผ ๋†’์—ฌ์„œ ์ „์ฒด ์‹ฌ์‚ฌ์‹œ๊ฐ„์„ ๋Š˜๋ ค๋ณธ๋‹ค.

 

 

 

 

 

 

 

 

 

๐Ÿ™‹‍โ™€๏ธ ์˜๊ฒฌ

 ์–ด๋ ค์›Œ์„œ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ ‘๊ทผํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๊ฝค ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค (ใ… ใ… )

 ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ํ’€๊ธด ํ–ˆ์ง€๋งŒ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ์•ˆ๋Š๊ปด์ง„๋‹ค ํ•ด์•ผํ•˜๋‚˜.................?

 ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ๊ตฌํ•œ ์ตœ์ ์˜ ์‹ฌ์‚ฌ์‹œ๊ฐ„์ด๋ผ๋ฉด, ๋น ๋ฅด๊ฒŒ............์‹ฌ์‚ฌ๊ฐ€ ๋˜๋‚˜๋ณด๋‹ค

 

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ํŒŒ์ด์ฌ(Python)

def solution(n, times):
    answer = 0
    low = 0
    high = max(times) * n   # ๋ชจ๋“  ์ธ์› ๊ฒ€์‚ฌ์— ์ตœ๋Œ€๋กœ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„

    while low <= high:

        # ์ž…๊ตญ์‹ฌ์‚ฌ ์ตœ์†Œ ์‹œ๊ฐ„
        # ์ฒ˜์Œ์—๋Š” ๊ฐ€์žฅ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์‹ฌ์‚ฌ๊ด€์˜ ์‹œ๊ฐ„๊ณผ ๊ฐ€์žฅ ์ ๊ฒŒ ๊ฑธ๋ฆฌ๋Š” ์‹ฌ์‚ฌ๊ด€์˜ ์‹œ๊ฐ„์˜ ํ‰๊ท ์œผ๋กœ
        mid = (low + high) //2

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

            # ๋ชจ๋“  ์ธ์›์„ ๊ฒ€์‚ฌ ๊ฐ€๋Šฅ ํ•˜๋ฉด break
            if count >= n:
                break

        # ๋ชจ๋“  ์ธ์›์„ ๊ฒ€์‚ฌ ๊ฐ€๋Šฅํ•˜๋ฉด answer๋ฅผ ์ง€๊ธˆ์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๊ณ 
        # ์ตœ์†Œ ์‹œ๊ฐ„์„ ์ค„์—ฌ๋‚˜๊ฐ„๋‹ค. high๊ฐ€ ์ค„์–ด๋“ค ์ˆ˜ ์žˆ๋Š” ์ด์ƒ ์ตœ์†Œ๊ฐ’์ด ๋” ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
        if count >= n :
            high = mid - 1
            answer= mid
        # ๋ชจ๋“ ์ธ์›์„ ๊ฒ€์‚ฌ ํ• ์ˆ˜ ์—†์œผ๋ฉด ์ตœ์†Œ ์‹œ๊ฐ„์„ ๋Š˜๋ฆฐ๋‹ค.
        else :
            low = mid +1

    return answer

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ