Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Python) 2293๋ฒˆ - ๋™์ „1 (๊ณจ๋“œ5, dp)

๊ฐ์ž ๐Ÿฅ” 2023. 4. 1. 19:12
๋ฐ˜์‘ํ˜•

๊ธฐ์—… ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต์„ ์œ„ํ•ด python์œผ๋กœ ๋ฌธ์ œํ’€์ด ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๐Ÿ˜…

 

โšซ๏ธ ๋ฌธ์ œ

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

 

2293๋ฒˆ: ๋™์ „ 1

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

www.acmicpc.net

 

โšซ๏ธ ๋‚˜์˜ ํ’€์ด

๋‚ด๊ฐ€ ์ฒ˜์Œ์— ํ•œ ์ƒ๊ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

dp[i] ์— i๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ ๋„ฃ๊ณ ์ž ํ–ˆ๋‹ค. ๊ทผ๋ฐ,,, ๊ทœ์น™๋„ ๋ณด์ด์ง€ ์•Š์„ ๋ฟ๋”๋Ÿฌ ์ฃผ์–ด์ง„ ์ˆ˜๋กœ ์–ด๋–ป๊ฒŒ ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ ์„ธ์–ด์•ผํ•˜๋Š”์ง€ ๊ฐ์ด ์•ˆ์™”๋‹ค.  ์˜ˆ๋ฅผ๋“ค์–ด, i = 5 ์ด๊ณ  ์ฃผ์–ด์ง„ ์ˆ˜๊ฐ€ 1, 2, 5 ๋ผ๋ฉด 5์—์„œ 1์„ ๋นผ๋ฉด์„œ 1์ด ๋ช‡๊ฐœ ํ•„์š”ํ• ์ง€ ์„ธ์–ด์ฃผ๊ณ , ๋˜๋‹ค์‹œ 5์—์„œ 2๋ฅผ ๋นผ๋ฉด์„œ ์กฐํ•ฉ์„ ์ฐพ์•„์ฃผ๊ณ .. ์ด๋Ÿฐ๋ฐฉ์‹์„ ์ƒ๊ฐํ•ด๋ดค์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ๋ชจ๋“ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์„ธ์–ด์„œ ๋„ฃ์–ด์ฃผ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด 'ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€๋ฌธ์ œ๋กœ ์ชผ๊ฐœ์„œ ์ƒ๊ฐํ•˜๋Š”' dp ์˜ ํ’€์ด ๋ฐฉ์‹๊ณผ๋Š” ๋ฉ€์–ด์ง€๊ณ , n์ด 100๊ฐœ, k๊ฐ€ 10000์œผ๋กœ ์ฃผ์–ด์ง€๋ฉด, 100 * 100 * 10000 ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๋ง๋„์•ˆ๋œ๋‹ค ใ… ใ…  

์–ด๋–ป๊ฒŒ dp๋ฅผ ๊ตฌ์„ฑํ•ด์•ผํ• ์ง€ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€, ๊ฒฐ๊ตญ ์ธํ„ฐ๋„ท์˜ ํžŒํŠธ๋ฅผ ์กฐ๊ธˆ ์–ป์—ˆ๋‹ค. .. ํ•˜... ์™ค์ผ€ ์–ด๋ ค์šด๊ฑฐ์•ผ ใ… 

์šฐ์„  ๋‚˜์˜ ์ฒซ๋ฒˆ์งธ ์ ‘๊ทผ๋ฐฉ์‹์ด ์™„์ „ํžˆ ํ‹€๋ฆฌ์ง„ ์•Š์•˜๋‹ค. i๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ dp์— ๋„ฃ๋Š” ๋ฐฉ์‹์€ ๋น„์Šทํ–ˆ๋”ฐ. ํ•˜์ง€๋งŒ ๊ทธ ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ฌ๋ž๋‹ค.

์ด ์˜ˆ์ œ์—์„œ ์šฐ๋ฆฌ๋Š” ๋™์ „ 1, 2, 5๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‚˜๋Š” dp ํ•˜๋‚˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ชจ๋“ ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ ํ•œ๋ฒˆ์— ์„ธ์–ด์ฃผ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ๋”ฐ๋กœ ์„ธ์–ด์ฃผ๋ฉด ๊ทœ์น™์„ฑ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  1. 1์„ ์‚ฌ์šฉํ•ด์„œ i๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
  2. 2๋ฅผ ํฌํ•จํ•ด์„œ i๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ (1๊ณผ 2)
  3. 5๋ฅผ ํฌํ•จํ•ด์„œ i๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ (1 , 2, 5)

์ด๋ ‡๊ฒŒ ์„ธ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ์„ธ์–ด์ฃผ๋ฉด ๊ทœ์น™์„ฑ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์šฐ์„ , ์šฐ๋ฆฌ๊ฐ€ ๋‹น์—ฐํ•˜๊ฒŒ ์•„๋Š” ์‚ฌ์‹ค์€ 2๋ฅผ ์ด์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด 2์ด์ƒ์˜ ์ˆ˜๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ๊ณผ 5๋ฅผ ์ด์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด 5์ด์ƒ์˜ ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ ๊ด€์ ์—์„œ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๊ฐ€๋ฉฐ ๊ทœ์น™์„ ์ฐพ์•„๋ณด๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์€ ์ ํ™”์‹์ด ๋‚˜์˜จ๋‹ค.

๋ณด๋ผ์ƒ‰ -> ๋ณด๋ผ์ƒ‰์ ํ™”์‹, ์—ฐ๋‘์ƒ‰ -> ์—ฐ๋‘์ƒ‰ ์ ํ™”์‹

์ด๋ ‡๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ตฌํ˜„์€? ์ด์ค‘ for๋ฌธ์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โšซ๏ธ ์ •๋‹ต์ฝ”๋“œ

n, k = map(int, input().split())
coin = []
for _ in range(0, n):
    coin.append(int(input()))

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

for c in coin:
    for i in range(c, k+1):
        dp[i] = dp[i] + dp[i-c]

print(dp[k])
๋ฐ˜์‘ํ˜•