๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Problem_Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 2437 ์ €์šธ (Python/ํŒŒ์ด์ฌ)

by ํฌ์ŠคํŠธ์‰์ดํฌ 2022. 10. 3.

<๋ฌธ์ œ ๋งํฌ>

https://www.acmicpc.net/problem/2437

 

2437๋ฒˆ: ์ €์šธ

ํ•˜๋‚˜์˜ ์–‘ํŒ” ์ €์šธ์„ ์ด์šฉํ•˜์—ฌ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ๋ฅผ ์ธก์ •ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ด ์ €์šธ์˜ ์–‘ ํŒ”์˜ ๋์—๋Š” ๋ฌผ๊ฑด์ด๋‚˜ ์ถ”๋ฅผ ์˜ฌ๋ ค๋†“๋Š” ์ ‘์‹œ๊ฐ€ ๋‹ฌ๋ ค ์žˆ๊ณ , ์–‘ํŒ”์˜ ๊ธธ์ด๋Š” ๊ฐ™๋‹ค. ๋˜ํ•œ, ์ €์šธ์˜ ํ•œ์ชฝ์—๋Š” ์ €์šธ์ถ”๋“ค๋งŒ ๋†“

www.acmicpc.net

<ํ’€์ด ์ „๋žต>

  1. ๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ๋กœ ์ •๋‹ต์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๋งค์šฐ ๋‹จ์ˆœํ•œ๋ฐ ์•„์ด๋””์–ด๋ฅผ ๋– ์˜ฌ๋ฆฌ๊ธฐ๊นŒ์ง€๊ฐ€ ๋งค์šฐ ํž˜๋“ค๋‹ค.
  2. ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    1. ํ˜„์žฌ๊นŒ์ง€ ์ธก์ • ๊ฐ€๋Šฅํ•œ ๋ฌด๊ฒŒ์˜ ์ตœ๋Œ“๊ฐ’์„ ans๋ผ๊ณ  ํ•˜๋ฉด (1 -  ans)์˜ ๊ฐ’๋“ค์„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    2. ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๋ฌด๊ฒŒ์ถ”๋“ค ์ค‘์—์„œ ํ•˜๋‚˜์˜ ๋ฌด๊ฒŒ์ถ”(weight)์„ ์„ ํƒํ•œ๋‹ค.
    3. weight <= ans๋ผ๋ฉด (1 ~ ans)์˜ ๊ฐ’๋“ค์„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ weight + 1, weight + 2 .... weight + ans๋„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ธก์ • ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ“๊ฐ’์€ ans + weight์ด ๋œ๋‹ค.
    4. weight > ans + 1๋ผ๋ฉด ans + 1์˜ ๊ฐ’์€ ์ธก์ • ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ํ•ด๋‹น ๊ฐ’์ด ์ •๋‹ต์ด ๋œ๋‹ค.
    5. ๋‹จ 1, 1, 1, 1 ํ˜น์€ 1, 2, 3, 4 ์ฒ˜๋Ÿผ 1 ~ sum(weights)๊นŒ์ง€ ๋ชจ๋‘ ์ธก์ •์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š” sum(weights) + 1์ด ์ •๋‹ต์ด ๋˜๋ฏ€๋กœ ๋งˆ์ง€๋ง‰์—๋„ ์ถœ๋ ฅ ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.

 

<์ •๋‹ต ์ฝ”๋“œ>

import sys, os, io, atexit

input = lambda: sys.stdin.readline().rstrip('\r\n')
stdout = io.BytesIO()
sys.stdout.write = lambda s: stdout.write(s.encode("ascii"))
atexit.register(lambda: os.write(1, stdout.getvalue()))

# 220927 2437 ์ €์šธ

# ์ •๋‹ต์ฝ”๋“œ

# N: ์ €์šธ ์ถ” ๊ฐœ์ˆ˜, weights: ์ €์šธ ์ถ”์˜ ๋ฌด๊ฒŒ
N = int(input())
weights = list(map(int, input().split()))

# ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
weights.sort()

# solve: ๊ทธ๋ฆฌ๋””๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ
def solve():
    # ans: ํ˜„์žฌ ์ธก์ • ๊ฐ€๋Šฅํ•œ ๋ฌด๊ฒŒ์˜ ์ตœ๋Œ“๊ฐ’ + 1 (์ธก์ •ํ•  ์ˆ˜ ์—†๋Š” ๋ฌด๊ฒŒ์˜ ์ตœ์†Ÿ๊ฐ’ )
    ans = 1
    for weight in weights:
        # ํ˜„์žฌ ์„ ํƒํ•œ ๋ฌด๊ฒŒ์ถ”๊ฐ€ ํ˜„์žฌ๊นŒ์ง€ ์ธก์ • ๊ฐ€๋Šฅํ•œ ๋ฌด๊ฒŒ์˜ ์ตœ๋Œ“๊ฐ’๋ณด๋‹ค ํด ๊ฒฝ์šฐ (ํ˜„์žฌ ๋ฌด๊ฒŒ ์ตœ๋Œ“๊ฐ’ + 1)์€ ์ธก์ •ํ•  ์ˆ˜ ์—†๋‹ค.
        if ans < weight:
            print(ans)
            return
        # ํ˜„์žฌ ์„ ํƒํ•œ ๋ฌด๊ฒŒ์ถ”(weight)๊ฐ€ ํ˜„์žฌ๊นŒ์ง€ ์ธก์ • ๊ฐ€๋Šฅํ•œ ๋ฌด๊ฒŒ์˜ ์ตœ๋Œ“๊ฐ’(ans)๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ ans <= K <= ans + weight์€ ์ธก์ • ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ธก์ • ๊ฐ€๋Šฅํ•œ ๋ฌด๊ฒŒ์˜ ์ตœ๋Œ“๊ฐ’์— weight์„ ๋”ํ•ด์ค€๋‹ค.
        ans += weight

    # 1 ~ sum(weights)๊นŒ์ง€ ๋ชจ๋‘ ์ธก์ •์ด ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ
    print(ans)
    return


solve()

 

๋Œ“๊ธ€