[BOJ] 2225 ํฉ๋ถํด (Python / ํ์ด์ฌ)

๐งท ๋ฌธ์
https://www.acmicpc.net/problem/2225
0๋ถํฐ N๊น์ง์ ์ ์ K๊ฐ๋ฅผ ๋ํด์ ๊ทธ ํฉ์ด N์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๋ฌธ์ ์ด๋ค.
๐ ํ์ด
ํผ์ ํ๋ค๊ฐ ํด๊ฒฐํ์ง ๋ชปํด ๋ค๋ฅธ ์ฌ๋๋ค์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ฌ๋ฌ ์ฌ๋๋ค์ ํ์ด๋ฅผ ๋ณด๋ ์ด ๋ฌธ์ ๋ DP๋ก ํธ๋ ๊ฒ๊ณผ ์ค๋ณต์กฐํฉ์ ์ด์ฉํด ํธ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
1. DP
Step 1.
๋จผ์ DP table์ (K x K)์ 2์ฐจ์ ํ
์ด๋ธ๋ก ์ ์ํ๊ณ , 0๋ถํฐ N๊น์ง์ ์ ์ K๊ฐ๋ฅผ ๋ํด์ ๊ทธ ํฉ์ด N์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ dp[N][K]
์ ๋ฃ์ด์ค๋ค.
ex) N = 0, K = 2 ์ผ ๊ฒฝ์ฐ : 0๋ถํฐ 2๊น์ง์ ์ ์ 1๊ฐ๋ฅผ ๋ํด ํฉ์ด 2๊ฐ ๋๋ ๊ฒฝ์ฐ์ ์์ด๋ค.
๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์๋0+0
ํ ๊ฐ์ง ๋ฐ์ ์์ ๊ฒ์ด๋ค. ์ฆ,d[0][2] = 1
ex) N = 1, K = 2 ์ผ ๊ฒฝ์ฐ : 0๋ถํฐ 2๊น์ง์ ์ ์ 2๊ฐ๋ฅผ ๋ํด ํฉ์ด 2๊ฐ ๋๋ ๊ฒฝ์ฐ์ ์์ด๋ค.
๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์๋0+1
,1+0
๋ ๊ฐ์ง์ด๋ค. ์ฆ,dp[1][2] = 2
ex) N = 2, K = 2 ์ผ ๊ฒฝ์ฐ : 0๋ถํฐ 2๊น์ง์ ์ ์ 2๊ฐ๋ฅผ ๋ํด ํฉ์ด 2๊ฐ ๋๋ ๊ฒฝ์ฐ์ ์์ด๋ค.
๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์๋0+2
,1+1
,2+0
์ธ ๊ฐ์ง์ด๋ค. ์ฆ,dp[2][2] = 3
ex) N = 2, K = 3 ์ผ ๊ฒฝ์ฐ : 0๋ถํฐ 2๊น์ง์ ์ ์ 3๊ฐ๋ฅผ ๋ํด ํฉ์ด 2๊ฐ ๋๋ ๊ฒฝ์ฐ์ ์์ด๋ค.
๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์๋0+0
+2,1+0
+1,0+1
+1,0+2
+0,2+0
+0,1+1
+0, ์ฌ์ฏ ๊ฐ์ง์ด๋ค. ์ฆ,dp[2][3] = 6
์ฌ๊ธฐ์์ K = 3 ์ธ ๊ฒฝ์ฐ๋ K = 2 ์ธ ๊ฒฝ์ฐ์์ ์ ์ 1๊ฐ๋ฅผ ๋ ์ถ๊ฐํ ๊ฒ์ด๋ค.
์ ๋ฆฌํ๋ฉด, ์์ ์์์dp[2][3]
์ 0๋ถํฐ 2๊น์ง 2๊ฐ์ ์ ์๋ฅผ ๋ํด ํฉ์ด 0 ~ 2๊ฐ ๋๋ ๊ฒฝ์ฐ์์ ๋ถ์กฑํ i๋งํผ์ ๋ํด์ค ๊ฒ์ด๋ค.
์ฆ,dp[2][3] = dp[0][2] + dp[1][2] + dp[2][2]
(๊ฐ๊ฐ ๋ถ์กฑํ 2, 1, 0์ ๋ํด์ค๋ค)
Step 2.
ํ์ง๋ง ์์ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํ๋ฉด
for i in range(1, n+1): for j in range(1, k+1): for k in range(i): dp[i][j] += dp[k][j-1]
for๋ฌธ์ ์ผ์ค์ผ๋ก ๋๊ธฐ ๋๋ฌธ์ O(N^3)
์ ์๋ ดํ๋ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
Step 3.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ ๋ค์ ๋ค์ฌ๋ค๋ณด๊ฒ ๋๋ฉด,dp[N][K] =
{dp[0][K-1] + dp[1][K-1] + ... + dp[N-2][K-1] + dp[N-1][K-1]
}+ dp[N][K-1]
{dp[0][K-1] + dp[1][K-1] + ... + dp[N-2][K-1] + dp[N-1][K-1]
}๋ฅผ dp[N-1][K]
๋ก ์นํํ ์ ์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก dp[N][K] = dp[N-1][K] + dp[N][K-1]
์ด๋ผ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๊ณ ์ด๊ฑธ ํตํด ์ํ๋ ๊ฐ์ ๊ตฌํ ์ ์๋ค.
2. ์ค๋ณต์กฐํฉ
Step 1.
์ด ๋ฌธ์ ๋ 0 ~ N๊น์ง์ ์ ์ K๊ฐ๋ฅผ ๋ํด์ ํฉ์ด N์ด ๋๋ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
์ค๋ณต์กฐํฉ์ n๊ฐ์ ์์์์ r๊ฐ๋ฅผ ์ค๋ณต์ ํ๋ฝํ์ฌ ๋ฝ์ ๋์ ๊ฐ์ง์์ด๋ค. nHr = (n+r-1)Cr
Step 2.
๋ฌธ์ ์ ์ ์ฉํ๋ฉด K๊ฐ์ ์ ์๋ฅผ ์ฌ์ฉํ์ฌ N์ ๋ง๋ค๋ฉด ๋๊ธฐ ๋๋ฌธ์ kHn
์ ๊ตฌํ๋ฉด ๋ต์ ์ป์ ์ ์๋ค.
Step 3.kHn = (k+n-1)Cn = (k+n-1)! / (k-1)! * n!
๐ ๋์ ์ฝ๋
import sys if __name__ == "__main__": n, k = map(int, input().split()) dp = [[0]*(k+1) for _ in range(n+1)] for i in range(k+1): dp[0][i] = 1 for i in range(1, n+1): for j in range(1, k+1): dp[i][j] = dp[i][j-1] + dp[i-1][j] dp[i][j] %= 1000000000 print(dp[n][k]) ######์ค๋ณต์กฐํฉ###### import sys def fac(n): res = 1 for _ in range(1, n+1): res *= _ return res if __name__ == "__main__": n, k = map(int, input().split()) print((fac(k+n-1) // (fac(k-1) * fac(n))) % 1000000000)
'Algorithm > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 13398 ์ฐ์ํฉ 2 (Pyhton / ํ์ด์ฌ) (0) | 2021.08.23 |
---|---|
[BOJ] 9465 ์คํฐ์ปค (Python / ํ์ด์ฌ) (0) | 2021.08.18 |
[BOJ] 1699 ์ ๊ณฑ์์ ํฉ (Pyhton / ํ์ด์ฌ) (0) | 2021.08.17 |
[BOJ] 11053 ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (Pyhton / ํ์ด์ฌ) (0) | 2021.08.04 |
[BOJ] 10844 ์ฌ์ด ๊ณ๋จ ์ (Python / ํ์ด์ฌ) (0) | 2021.08.04 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[BOJ] 13398 ์ฐ์ํฉ 2 (Pyhton / ํ์ด์ฌ)
[BOJ] 13398 ์ฐ์ํฉ 2 (Pyhton / ํ์ด์ฌ)
2021.08.23 -
[BOJ] 9465 ์คํฐ์ปค (Python / ํ์ด์ฌ)
[BOJ] 9465 ์คํฐ์ปค (Python / ํ์ด์ฌ)
2021.08.18 -
[BOJ] 1699 ์ ๊ณฑ์์ ํฉ (Pyhton / ํ์ด์ฌ)
[BOJ] 1699 ์ ๊ณฑ์์ ํฉ (Pyhton / ํ์ด์ฌ)
2021.08.17 -
[BOJ] 11053 ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (Pyhton / ํ์ด์ฌ)
[BOJ] 11053 ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (Pyhton / ํ์ด์ฌ)
2021.08.04
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.