ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 6236 ์šฉ๋ˆ ๊ด€๋ฆฌ with Python
    PS 2022. 6. 17. 13:16
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 6236 ์šฉ๋ˆ ๊ด€๋ฆฌ

    ๐Ÿ’ก ์กฐ๊ฑด

    1. ํ˜„์šฐ๋Š” ์•ž์œผ๋กœ N์ผ ๋™์•ˆ ์ž์‹ ์ด ์‚ฌ์šฉํ•  ๊ธˆ์•ก์„ ๊ณ„์‚ฐํ•˜์˜€๊ณ , ๋ˆ์„ ํŽ‘ํŽ‘ ์“ฐ์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์ •ํ™•ํžˆ M๋ฒˆ๋งŒ ํ†ต์žฅ์—์„œ ๋ˆ์„ ๋นผ์„œ ์“ฐ๊ธฐ๋กœ ํ•˜์˜€๋‹ค.
    1. ํ˜„์šฐ๋Š” ํ†ต์žฅ์—์„œ K์›์„ ์ธ์ถœํ•˜๋ฉฐ, ํ†ต์žฅ์—์„œ ๋บ€ ๋ˆ์œผ๋กœ ํ•˜๋ฃจ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉด ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ ,
      ๋ชจ์ž๋ผ๊ฒŒ ๋˜๋ฉด ๋‚จ์€ ๊ธˆ์•ก์€ ํ†ต์žฅ์— ์ง‘์–ด๋„ฃ๊ณ  ๋‹ค์‹œ K์›์„ ์ธ์ถœํ•œ๋‹ค.
    1. ๋‹ค๋งŒ ํ˜„์šฐ๋Š” M์ด๋ผ๋Š” ์ˆซ์ž๋ฅผ ์ข‹์•„ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ •ํ™•ํžˆ M๋ฒˆ์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด์„œ ๋‚จ์€ ๊ธˆ์•ก์ด ๊ทธ๋‚  ์‚ฌ์šฉํ•  ๊ธˆ์•ก๋ณด๋‹ค
      ๋งŽ๋”๋ผ๋„ ๋‚จ์€ ๊ธˆ์•ก์€ ํ†ต์žฅ์— ์ง‘์–ด๋„ฃ๊ณ  ๋‹ค์‹œ K์›์„ ์ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
    1. ํ˜„์šฐ๋Š” ๋ˆ์„ ์•„๋ผ๊ธฐ ์œ„ํ•ด ์ธ์ถœ ๊ธˆ์•ก K๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ํ˜„์šฐ๊ฐ€ ํ•„์š”ํ•œ ์ตœ์†Œ ๊ธˆ์•ก K๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ.
    1. 1๋ฒˆ์งธ ์ค„์—๋Š” N๊ณผ M์ด ๊ณต๋ฐฑ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค N โ‰ค 100,000, 1 โ‰ค M โ‰ค N)
      2๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ ์ด N๊ฐœ์˜ ์ค„์—๋Š” ํ˜„์šฐ๊ฐ€ i๋ฒˆ์งธ ๋‚ ์— ์ด์šฉํ•  ๊ธˆ์•ก์ด ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค ๊ธˆ์•ก โ‰ค 10000)
      ์ฒซ ๋ฒˆ์งธ ์ค„์— ํ˜„์šฐ๊ฐ€ ํ†ต์žฅ์—์„œ ์ธ์ถœํ•ด์•ผ ํ•  ์ตœ์†Œ ๊ธˆ์•ก K๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    1. ์ด๋ถ„ํƒ์ƒ‰ ์œ ํ˜•์˜ ๋ฌธ์ œ

    ๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

    from sys import stdin
    
    n, m = map(int, stdin.readline().split())
    arr = []
    for _ in range(n):
        arr.append(int(stdin.readline()))
    
    start = min(arr)
    end = sum(arr)
    
    while start <= end:
        mid = (start + end) // 2
        money = mid
        cnt = 1
    
        for i in arr:
            if money - i < 0:
                money = mid
                cnt += 1
            money -= i
    
        if cnt > m or mid < max(arr):
            start = mid + 1
        else:
            end = mid - 1
            ans = mid
    
    print(ans)

    ๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

    ์˜ˆ์ œ

    7 5
    100
    400
    300
    100
    500
    101
    400

    ์‹คํ–‰๊ฒฐ๊ณผ

    500

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. i๋ฒˆ์งธ ๋‚ ์— ์ด์šฉํ•  ๊ธˆ์•ก์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ด์ฃผ๊ณ  ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ start, ๊ฐ€์žฅ ํฐ ๊ฐ’์„ end๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.
    1. ๊ตฌํ•  ์ธ์ถœ๊ธˆ์•ก์„ mid = (start + end) // 2๋กœ ์ •ํ•ด์ฃผ๊ณ , ์ธ์ถœํ•œ ํšŸ์ˆ˜ cnt๋ฅผ 1๋กœ ์„ค์ •ํ•œ๋‹ค.
    1. ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ(x : ํ˜„์žฌ ์ˆœํšŒํ•˜๋Š” ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๊ธˆ์•ก) ์ตœ์†Œ ์ธ์ถœ๊ธˆ์•ก - x ์˜ ๊ฐ’์ด 0๋ณด๋‹ค ์ž‘์œผ๋ฉด
      ์ธ์ถœ๊ธˆ์•ก money๋ฅผ mid ๋กœ ์ €์žฅํ•œ๋‹ค.
      ๋งŒ์•ฝ ์ด ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด money - i ๊ฐ’์œผ๋กœ money๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.
    1. arr ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ์ˆœํšŒํ•œ ํ›„, ์ถœ๊ธˆ ํšŸ์ˆ˜๊ฐ€ m ์„ ๋„˜์–ด์„  ๊ฒฝ์šฐ ํ˜น์€ mid ๊ฐ’์ด arr์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ๋Š”
      start ๋ฅผ mid + 1 ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.
    1. (4)๋ฒˆ์˜ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, end ๊ฐ’์„ end - 1 ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.
      ๋˜ํ•œ ans์˜ ๊ฐ’์„ mid ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.
    1. ์ด๋ถ„ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด ans ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.