๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ’ป๐Ÿ’ญ๐ŸŽง๐ŸŒ

BOJ 2437 : ์ €์šธ (Python) ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€ ํ’€์ด

BOJ 2437 : ์ €์šธ (Python)

adorableco 2023. 2. 28. 22:07
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

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

 

2437๋ฒˆ: ์ €์šธ

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

www.acmicpc.net

 

 

์ฝ”๋“œ

import sys
input = sys.stdin.readline

n = int(input())
array= list(map(int, input.split()))
array.sort()

target = 1

for i in array:
    if target < i:
        break

    target += i

print(target)

 

 

ํ’€์ด

target ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ์ €์šธ์ถ”๋“ค์„ ์ฐจ๋ก€๋Œ€๋กœ ๋”ํ•œ๋‹ค. ์ด๋•Œ target์ด ํ•ด๋‹น ์ €์šธ์ถ”๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด target์ด ํ•ด๋‹น ์ €์šธ์ถ”๋ณด๋‹ค ์ž‘์œผ๋ฉด ๊ทธ ์‚ฌ์ด์— ๋ฌด๊ฒŒ๋ฅผ ์žด ์ˆ˜ ์—†๋Š” ์ˆซ์ž๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

target์˜ ์ดˆ๊ธฐ ๊ฐ’์€ 1์ด๋‹ค. → ๋งŒ์•ฝ ๊ฐ€์žฅ ๊ฐ€๋ฒผ์šด ์ €์šธ์ถ”๊ฐ€ 1์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ฌด๊ฒŒ๊ฐ€ 1์ธ ๊ฒฝ์šฐ๋Š” ๋ฌด์กฐ๊ฑด ์žด ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— 1์ด ๊ฐ€์žฅ ์ž‘์€ ์ธก์ •ํ•  ์ˆ˜ ์—†๋Š” ๋ฌด๊ฒŒ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

if target < i:
        break

๊ทธ๋ž˜์„œ ๋ฐ˜๋ณต๋ฌธ ์ฒซ๋ฒˆ์งธ๋ถ€ํ„ฐ ์ด if๋ฌธ์— ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋˜๊ณ  ์ •๋‹ต์€ target์˜ ์ดˆ๊ธฐ ๊ฐ’์ธ 1์ด ๋œ๋‹ค. 

 

๊ทธ ์™ธ์—๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ฐฉ๋ฒ•๋Œ€๋กœ ์ง„ํ–‰๋œ๋‹ค. 

 

 

 


 

๊ธฐํƒ€

์ฒ˜์Œ์—๋Š” ์ €์šธ์ถ”๋“ค์˜ ์ดํ•ฉ์—์„œ ๊ฐ€์žฅ ํฐ ์ €์šธ์ถ”์˜ ๋ฌด๊ฒŒ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋นผ๋ฉด์„œ ์ธก์ •ํ•  ์ˆ˜ ์—†๋Š” ๋ฌด๊ฒŒ๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ๋‹น์—ฐํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค. ๋ƒ…๋‹ค ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋‚ด๋Š”๋ฐ ๋” ์‹œ๊ฐ„์„ ๋งŽ์ด ์Ÿ์•„ ๋ถ€์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ ์ฝ”๋“œ

import sys
input = sys.stdin.readline

n = int(input())
weight = list(map(int, input().split()))
weight.sort(reverse = True)

if weight.count(1)==len(weight):
    print(sum(weight)+1)
    sys.exit()

if weight[len(weight)-1] >= 2:
    print(weight[len(weight)-1]-1)
    sys.exit()

for i in range(1,sum(weight)):
    integer = i
    sub = 0
    for w in range(n):
        if weight[w] <= integer:
            if integer > sum(weight)-sub:
                print(i)
                sys.exit()
            
            integer -= weight[w]
        sub += weight[w]    
        if integer == 0:
            break

    if integer > 0:
        print(i)
        sys.exit()

 

 

 

๋ฐ˜์‘ํ˜•