PS

[๋ฐฑ์ค€] 6236 ์šฉ๋ˆ ๊ด€๋ฆฌ with Python

ํ˜•์ค€_It's 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 ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
๋ฐ˜์‘ํ˜•