[Python] 2613 ์ˆซ์ž๊ตฌ์Šฌ

2026. 3. 18. 17:54ยทCoding-Test/๋ฐฑ์ค€
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ป ๋ฌธ์ œ ์ •์˜

๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ตฌ์Šฌ์„ ๊ทธ๋ฃน์ง€์–ด์„œ ์ˆซ์ž์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•  ๋•Œ, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฒฝ์šฐ์—์„œ ์ตœ๋Œ“๊ฐ’์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋Š” 17์ด๋‹ค.

๊ฐ ๊ทธ๋ฃน์˜ ํ•ฉ ์ค‘ ์ตœ๋Œ“๊ฐ’์ด ์ตœ์†Œ๊ฐ€ ๋˜๋„๋ก M๊ฐœ์˜ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ, ๊ทธ ์ตœ๋Œ“๊ฐ’๊ณผ ๊ฐ ๊ทธ๋ฃน์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ตฌ์Šฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ์•„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ—’๏ธ ์ตœ์ข… ์ œ์ถœ ์ฝ”๋“œ

# 2613 ์ˆซ์ž๊ตฌ์Šฌ

# "๊ฐ ๊ทธ๋ฃน ํ•ฉ์ด mid ์ดํ•˜๊ฐ€ ๋˜๋„๋ก M๊ฐœ ์ดํ•˜ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”์ง€" ํ™•์ธ
def check(mid):
    count = 1 # ํ˜„์žฌ ๊ทธ๋ฃน์˜ ๊ฐฏ์ˆ˜
    s = 0 # ํ˜„์žฌ ๊ทธ๋ฃน์˜ ํ•ฉ

    for num in numbers:
        # ํ˜„์žฌ ๊ทธ๋ฃน์— num์„ ๋”ํ•˜๋ฉด mid๊ฐ’ ์ดˆ๊ณผ -> ๊ทธ๋ฃน ์ˆ˜ ์ฆ๊ฐ€
        if s + num > mid:
            count += 1
            s = num
        # ํ˜„์žฌ ๊ทธ๋ฃน์— ์ˆซ์ž ์ถ”๊ฐ€
        else:
            s += num

    # ๊ทธ๋ฃน ๊ฐฏ์ˆ˜๊ฐ€ M๊ฐœ ๋ฏธ๋งŒ์ด๋ฉด True -> ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ
    return count <= M

N, M = map(int, input().split())
numbers = list(map(int, input().split()))

left = max(numbers)
right = sum(numbers)

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

    # ํ˜„์žฌ์˜ ์ค‘์•™๊ฐ’์œผ๋กœ M๊ฐœ์˜ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๋” ์ž‘์€ ๊ฐ’์œผ๋กœ๋„ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ
    if check(mid):
        right = mid - 1
    # ์•„๋‹ˆ๋ฉด ๊ฐ’์„ ํ‚ค์šด๋‹ค.
    else:
        left = mid + 1

# ์ด๋ถ„ํƒ์ƒ‰ ์ข…๋ฃŒ ํ›„ left์˜ ๊ฐ’ = ์ตœ์ ์˜ ๊ฐ’
answer = left
print(answer)

groups = []

s = 0 # ํ˜„์žฌ ๊ทธ๋ฃน ํ•ฉ
cnt = 0 # ํ˜„์žฌ ๊ทธ๋ฃน ๊ตฌ์Šฌ ๊ฐœ์ˆ˜

for num in numbers:

    # ํ˜„์žฌ ๊ทธ๋ฃน์— num์„ ๋”ํ–ˆ์„ ๋•Œ,
    if s + num > answer:
        # answer๋ฅผ ๋„˜๋Š”๋‹ค๋ฉด ์ง€๊ธˆ๊นŒ์ง€์˜ ๊ทธ๋ฃน์€ ํ™•์ •
        groups.append(cnt)
        # ์ƒˆ๋กœ์šด ๊ทธ๋ฃน ์ƒ์„ฑ
        s = num
        cnt = 1
    
    # answer๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ํ˜„์žฌ ๊ทธ๋ฃน์— ๊ณ„์† ๋”ํ•ด์คŒ
    else:
        s += num
        cnt += 1

# ๋งˆ์ง€๋ง‰ ๊ทธ๋ฃน ์ถ”๊ฐ€
groups.append(cnt)

# ํ˜„์žฌ ๊ทธ๋ฃน์˜ ๊ฐœ์ˆ˜๊ฐ€ M๊ฐœ ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, ๊ตฌ์Šฌ์ด 2๊ฐœ ์ด์ƒ์ธ ๊ทธ๋ฃน์—์„œ ๋ถ„ํ• ํ•˜์—ฌ ๊ทธ๋ฃน์˜ ๊ฐœ์ˆ˜๋ฅผ M๊ฐœ๋กœ ๋งž์ถฐ์คŒ
while len(groups) < M:
    for i in range(len(groups)):
        if groups[i] > 1:
            # ๊ทธ๋ฃน์„ ํ•˜๋‚˜ ๋ถ„๋ฆฌ
            groups[i] -= 1

            # ์•ž์— ์ƒˆ๋กœ์šด ๊ทธ๋ฃน ์ถ”๊ฐ€
            groups.insert(i, 1)

            break

print(*groups)

๐Ÿ’ญ ์˜ค๋Š˜์˜ ํšŒ๊ณ 

728x90
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Coding-Test > ๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Python] 11049 ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ˆœ์„œ  (0) 2026.03.20
[Python] 16947 ์„œ์šธ ์ง€ํ•˜์ฒ  2ํ˜ธ์„   (0) 2026.03.19
[Python] 16946 ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ 4  (0) 2026.03.17
[Python] 1765 ๋‹ญ์‹ธ์›€ ํŒ€ ์ •ํ•˜๊ธฐ  (0) 2026.03.03
[Python] 2636 ์น˜์ฆˆ  (0) 2026.03.03
'Coding-Test/๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Python] 11049 ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ˆœ์„œ
  • [Python] 16947 ์„œ์šธ ์ง€ํ•˜์ฒ  2ํ˜ธ์„ 
  • [Python] 16946 ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ 4
  • [Python] 1765 ๋‹ญ์‹ธ์›€ ํŒ€ ์ •ํ•˜๊ธฐ
ํฌ์™„
ํฌ์™„
ํฌ์™„ํ•œ ์ฝ”๋”ฉ์ผ์ƒ
    ๋ฐ˜์‘ํ˜•
  • ํฌ์™„
    Code-Heewan
    ํฌ์™„
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
      • Python
        • ๊ฐ€์ƒํ™˜๊ฒฝ
      • Algorithm
      • Coding-Test
        • ๋ฐฑ์ค€
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
        • ํ•ญํ•ด99
      • Data-Analysis
      • ์›น ๊ฐœ๋ฐœ
        • django
      • AWS
      • ๊ณต๋ชจ์ „
      • Mobile
  • ๋งํฌ

    • Github
  • 300x250
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
ํฌ์™„
[Python] 2613 ์ˆซ์ž๊ตฌ์Šฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”