๋ฐฑ์ค€ 2293 ํŒŒ์ด์ฌ

2022. 1. 9. 22:51ใ†๐Ÿ”ฑ Algorithm/DP

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

 

2293๋ฒˆ: ๋™์ „ 1

์ฒซ์งธ ์ค„์— n, k๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) ๋‹ค์Œ n๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ๊ฐ์˜ ๋™์ „์˜ ๊ฐ€์น˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋™์ „์˜ ๊ฐ€์น˜๋Š” 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

 

 

๋ฌธ์ œ ์š”์•ฝ

์ฃผ์–ด์ง„ N๊ฐœ ์ˆซ์ž๋กœ ์ด๋ค„์ง„ ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋”ํ•˜์—ฌ, K ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•˜๋ผ (๋ฐฐ์—ด์˜ ์ˆซ์ž๋Š” ์ค‘๋ณตํ•˜์—ฌ ๋”ํ•ด๋„ ๋œ๋‹ค)

 

 

 

์ •๋‹ต ์ฝ”๋“œ

N, K = map(int, input().split())

arr = []
for _ in range(N):
    arr.append(int(input()))

dp = [0] * (K + 1)
dp[0] = 1

for a in arr:
    for j in range(a, K + 1):
        dp[j] += dp[j - a]
print(dp[K])

 

 

์ ‘๊ทผ๋ฐฉ๋ฒ•

 

์‹œ๊ฐ„์ œํ•œ, ๋ฉ”๋ชจ๋ฆฌ์ œํ•œ์ด ๋‹ค๋ฅธ ๋ฌธ์ œ๋ณด๋‹ค ๋ˆˆ์—๋„๊ฒŒ ์ž‘๋‹ค. ์ฆ‰ ๋ฌด์ž‘์ • ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฌ๋Š” brute force ๋‚˜ greedy ๋กœ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ๋‹ค.

 

๋ฐฐ์—ด์˜ ์ˆ˜๋ฅผ ๋”ํ•˜์—ฌ K ๊ฐ€ ๋˜๋Š” ์กฐํ•ฉ์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 10์„ ์ด๋ฃจ๋Š” ์กฐํ•ฉ ์ค‘ (5, 5)๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ฃผ์–ด์ง„ ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ 5 ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์กด์žฌํ•œ๋‹ค. ์ฆ‰ ๋ถ€๋ถ„ ํ•ฉ์„ ์ด์šฉํ•˜์—ฌ ์ •๋‹ต์— ๊ฐ€๊นŒ์›Œ ์ง€๋Š” ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

10์„ ์ด๋ฃจ๋Š” ์—ฌ๋Ÿฌ ์กฐํ•ฉ์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„ , ๊ทธ ์ „ ๋‹จ๊ณ„์ธ 9, 8, 7, ... , 2, 1 ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์กฐํ•ฉ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ณด์ž. ๊ทธ๋ฆฌํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” 10 (=K) ๋ฅผ ๊ตฌํ•˜๋Š”๋ฐ ๋” ์ˆ˜์›”ํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์—ฌ๊ธฐ์„œ a ๋Š” ์ฃผ์–ด์ง„ N๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

a ๊ฐ€ 1๋งŒ ์žˆ์„ ๋•Œ๋Š”, ๊ฐ๊ฐ์˜ ์ˆซ์ž๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๋Š” ๋‹น์—ฐํžˆ ํ•˜๋‚˜๋‹ค. (๋ชจ๋“  ์ˆ˜๋ฅผ 1์„ ๋”ํ•˜์—ฌ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•)

์ด๋•Œ์˜ ๊ฐ’์„ dp ๋ผ๋Š” ๋ฐฐ์—ด์— ์ €์žฅ ํ•ด๋‘๊ณ , a ๊ฐ€ 2์ธ ๊ฒฝ์šฐ๋ฅผ ๋ณด์ž.

a ๊ฐ€ 2์ผ ๋•Œ 2๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ dp[2]์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ’์ด 2๋กœ ์—…๋ฐ์ดํŠธ(1 -> 2)๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

์ด๋Ÿฐ ์‹์œผ๋กœ ๊ฐ ๋ฐฐ์—ด์˜ ๊ฐ’๋“ค์„ ์—…๋ฐ์ดํŠธํ•ด๋‚˜๊ฐ€๋ฉด, ์ฃผ์–ด์ง„ N ๊ฐœ ์ˆซ์ž๋กœ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋”ฐ.

 

์ถ”๊ฐ€ )

dp[j - a] ์‹์„ ๋ณด๋ฉด, a ๋Š” N ๊ฐœ์˜ ์ˆซ์ž์ค‘ ํ•˜๋‚˜์ด๊ณ , j ๋Š” a ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆซ์ž์ค‘ ํ•˜๋‚˜์ด๋‹ค.( K ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๊ธฐ๋„ ํ•จ).

์ฆ‰ j - a ๋Š” 0 ์—์„œ๋ถ€ํ„ฐ K - a ๊นŒ์ง€์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๋Š” ์ˆซ์ž๊ฐ€ ๋œ๋‹ค. 

 

 

'๐Ÿ”ฑ Algorithm > DP' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฐฑ์ค€ 11055 ํŒŒ์ด์ฌ  (0) 2022.01.23
๋ฐฑ์ค€ 1912 ํŒŒ์ด์ฌ  (0) 2022.01.20
๋ฐฑ์ค€ 11053 ํŒŒ์ด์ฌ  (0) 2022.01.18
๋ฐฑ์ค€ 12852 ํŒŒ์ด์ฌ  (1) 2022.01.12
๋ฐฑ์ค€ 1699 ํŒŒ์ด์ฌ  (0) 2022.01.07