[BOJ] 2293. ๋™์ „1 (๐Ÿฅ‡, DP)

lemythe423ยท2023๋…„ 9์›” 17์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
51/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

1์›์œผ๋กœ 10์›์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด์ž. ์ฒ˜์Œ์—” 1์›์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. 1์›์œผ๋กœ 1์›์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ํ•œ ๊ฐ€์ง€๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด 1์›์œผ๋กœ 2์›์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€? 1์›์—๋‹ค๊ฐ€ 1์›์„ ๋”ํ•˜๋Š” ๋ฐฉ๋ฒ• ํ•œ ๊ฐ€์ง€๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด 1์›์œผ๋กœ 3์›์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋ช‡ ๊ฐ€์ง€์ผ๊นŒ. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 2์›์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— 1์›์„ ๋”ํ•˜๋Š” ๋ฐฉ๋ฒ• ํ•œ ๊ฐ€์ง€๋‹ค. n์›์œผ๋กœ k์›์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ n์›์œผ๋กœ k-1์›์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™์€ ์…ˆ์ด๋‹ค.

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ์ž‘์€ ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ๋ฒ•์œผ๋กœ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด ๋ฐฉ์‹์ด๋‹ค. 10์›์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ง“์ˆ˜๋Š” ๊ทธ๋ณด๋‹ค ์ž‘์€ k์›์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๋“ค์˜ ๊ฐ€์ง“์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ ํ™”์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋™์ „ n๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€์ด๋ฏ€๋กœ ๋ˆ„์ ์œผ๋กœ ๋”ํ•ด๋‚˜๊ฐ€์•ผ ํ•œ๋‹ค.

dp[k] += dp[k-n]

# ๋™์ „ 1

n, k = map(int, input().split())
coins = [int(input()) for _ in range(n)]
dp = [0]*(k+1)

for i in range(n):
    coin = coins[i]
    if coin > k:
        continue
    dp[coin] += 1
    for j in range(coin+1, k+1):
        dp[j] += dp[j-coin]

print(dp[k])
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€