๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [Gold5] 2225๋ฒˆ_ํ•ฉ ๋ถ„ํ•ด

Dbswnstjd 2023. 4. 27. 16:26

๋ฌธ์ œ

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

 

2225๋ฒˆ: ํ•ฉ๋ถ„ํ•ด

์ฒซ์งธ ์ค„์— ๋‹ต์„ 1,000,000,000์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 2225๋ฒˆ ๋ฌธ์ œ - ํ•ฉ๋ถ„ํ•ด
import sys
input = sys.stdin.readline

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

for j in range(201):
    dp[1][j] = 1
    dp[2][j] = j + 1

for i in range(2, 201):
    dp[i][1] = i
    for j in range(2, 201):
        dp[i][j] = (dp[i][j-1] + dp[i-1][j]) % 1000000000
print(dp[k][n])

DP ๋ฌธ์ œ์ธ๋ฐ ์ ํ™”์‹์„ ์ฐพ๋Š”๋ฐ ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค. 

n๊ณผ k์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ด์•ผ ํ•œ๋‹ค. 

i \ j n = 0 n = 1 n = 2 n = 3
k = 0 0 0 0
k = 1 1 (0) 1 (1) -> ์ž๊ธฐ ์ž์‹  1 1
k = 2 1 (0,0) 2 (0,1) (1,0) 3 4
k = 3 1 3 (0,0,1) (0,1,0) (1,0,0) 6 10

์œ„์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณด๋ฉด k = 0 ์ผ๋•Œ ํ•ฉ์ด n์ด ๋˜๋Š” ์ˆ˜๋Š” ์ฐพ์„ ์ˆ˜ ์—†๋‹ค. 

๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€์„œ k = 1์ผ ๋•Œ๋Š” n๊ณผ ๊ด€๊ณ„์—†์ด n ์ž์‹ ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•๋ฐ–์— ์กด์žฌํ•˜์ง€ ์•Š์•„ ๋ชจ๋‘ 1๊ฐ€์ง€์ด๋‹ค.

k = 2 ์ผ ๋•Œ๋Š” n + 1์ด๋ผ๋Š” ์ ํ™”์‹์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

k = 3 ์ผ ๋•Œ๋Š” dp[ i ] [ j ] = dp[ i - 1 ][ j ] + dp[ i ][ j - 1 ] ์ด๋ผ๋Š” ์ ํ™”์‹์ด ์„ฑ๋ฆฝ๋œ๋‹ค. 

 

ํ‘œ๋ฅผ ๊ทธ๋ ค์„œ ๊ตฌํ•˜๋ฉด ๋งค์šฐ ์‰ฌ์› ๋Š”๋ฐ ๋ณต์žกํ•˜๊ฒŒ ์ƒ๊ฐํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ๋‹ค.