๐ ๋ฌธ์
์๋ ํ์ธ์~ ์ ๋ ์ค๋ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(๋์ ๊ณํ๋ฒ)์ ์ค๋ช ํ๊ธฐ ์ํด ๋ฑ์ฅํ ์ฑ์ ์์! ๋ค์ด๋๋ฏน์ ์ด๋ฆ์ด ์์ฒญ ๊ฑฐ์ฐฝํ์ง๋ง ์ฌ์ค ์ด๋ฆ์ ๋นํด ๊ฐ๋ ์ ๊ฐ๋จํ๋ต๋๋ค. ๋ค์ด๋๋ฏน์ ๊ธฐ๋ณธ ์์ด๋์ด๋ ๋ฐ๋ก ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ์ฌ์ฉํด์ (= ์ด๋ฏธ ๊ณ์ฐ๋ ๊ฐ์ ์ฌ์ฉํด์, ์ด๋ ค์ด ๋ง๋ก ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ค๊ณ ํด์) ๋ฐ๋ณต๋๋ ๋๊ฐ์ ์ฐ์ฐ ํ์๋ฅผ ์ค์ด๋ ๊ฑฐ์์.
์๋ฅผ ๋ค์ด์, 5๋ฒ์งธ ํผ๋ณด๋์น ์์ด์ ๊ตฌํ๋ F(5)์ ๋์ ๊ณผ์ ์ ์ดํด๋ณผ๊ฒ์.
๊ฐ์ ํจ์๊ฐ ๋ถํ์ํ๊ฒ ๋ง์ด ํธ์ถ๋๋ ๊ฒ์ ๋ณผ ์ ์์ฃ ? F(2)์ F(3)์ ๋ฏธ๋ฆฌ ๊ตฌํด๋๊ณ F(4)๋ฅผ ๊ตฌํ ๋ ๋ฏธ๋ฆฌ ๊ตฌํด๋ F(2)์ F(3)์ ๊ฐ์ ์ด์ฉํ๋ฉด ๋ถํ์ํ ํธ์ถ์ ์ค์ผ ์ ์์ด์. ์กฐ๊ธ ์๋ฐํ๊ฒ ์ด์ผ๊ธฐ ํด๋ณผ๊ฒ์. ์ํ์ ์ผ๋ก ํผ๋ณด๋์น ์์ด์ F(n) = F(n-1) + F(n-2)๋ก ์ ์ํ ์ ์์ฃ ? ์ด ์์ ์ธ์ฐ๋ ๊ณผ์ ์ ์ ํ์์ ์ธ์ด๋ค๊ณ ํด์. ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง๋ ์์์ ๋ง๋ค๊ณ ๊ทธ ์์์ ๊ทธ๋๋ก ์ฝ๋์ ์ฎ๊ธฐ๋ฉด ์์ฃผ ์ฝ๊ฒ ๋ค์ด๋๋ฏน์ ๊ตฌํํ ์ ์์ด์.
๋ฌผ๋ก ๋ค์ฐจ์ ๋ฐฐ์ด๋ก๋ ๊ฐ๋ฅํด์! ์ค๋ฅธ์ชฝ, ์๋์ชฝ์ผ๋ก๋ง ์์ง์ผ ์ ์์ ๋, D[1][1]์์ D[x][y]๊น์ง ๋๋ฌํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ ์ผ์ผํ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค ๊ณ์ฐํ ํ์ ์์ด, D[i][j] = (i, j)์ ๋๋ฌํ๋ ๋์ ๊ฒฝ์ฐ์ ์ = D[i-1][j] + D[i][j-1]๋ฅผ ์ธ์์ ํด๊ฒฐํ ์๋ ์์ฃ .
์ด๋์? ๋ค์ด๋๋ฏน ์ด๋ ต์ง ์์ฃ ? ์ด์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณผ๊ฒ์!
“→, ↓, โ์ ์ธ ๋ฐฉํฅ๋ง ์ฌ์ฉํด์ ํ ๋ฒ์ ํ ์นธ์ฉ ์ด๋ํ ๋, ์ผ์ชฝ ์ (1, 1)์์ ์ถ๋ฐํ์ฌ ์ค๋ฅธ์ชฝ ์๋ (n, m)์ ๋์ฐฉํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ์ฌ๋ผ.”
๐์ ๋ ฅ
n๊ณผ m์ด ์ฃผ์ด์ง๋ค. (1 ≤ n, m ≤ 1,000)
๐์ถ๋ ฅ
(1, 1)์์ (n, m)์ ๋๋ฌํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ์ฌ๋ผ. ๋จ, ๊ฒฝ์ฐ์ ์๊ฐ ์์ฒญ ์ปค์ง ์ ์์ผ๋ฏ๋ก ๊ฒฝ์ฐ์ ์๋ฅผ 1,000,000,007(=10^9+7)๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํด์
๋ฌธ์ ์ ์ ๋ชฉ์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ ์ด ๋ฌธ์ ๋ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ฉด ๋๋ ๋ฌธ์ ์๋ค.
1,1 ์์ ์ค๋ฅธ์ชฝ์ผ๋ก(x+1,y), ์๋๋ก(x,y+1), ๋๊ฐ์ ์ฐ์ธกํ๋จ์ผ๋ก(x+1,y+1) ์์ง์ด๋ฉด์ (n,m)์ผ๋ก ๊ฐ๋ ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
์ด๋ ๋ฐฉํฅ์ด →, ↓, โ ์ด๋ ๊ฒ ์ธ๊ฐ์ง๊ฐ ๊ฐ๋ฅํ๋ค. ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ค๋ฉด ํ์ฌ ์์น์์ →์์ ์ค๋ ๊ฒฝ์ฐ์ ์์, ↓์์ ์ค๋ ๊ฒฝ์ฐ์ ์, ๊ทธ๋ฆฌ๊ณ โ์์ ์ค๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ๋ํ๋ฉด ๋๋ค.
์๋ ํ์ ๊ฐ์ด ์ค๋ช ํ๊ฒ ๋ค.
1 1,1 |
1 1,2 |
1 1,3 |
1 1,4 |
1 1,5 |
1 1,6 |
1 2,1 |
3 2,2 |
5 2,3 |
7 2,4 |
9 2,5 |
11 2,6 |
1 3,1 |
5 3,2 |
13 3,3 |
25 3,4 |
41 3,5 |
61 3,6 |
1 4,1 |
7 4,2 |
25 4,3 |
63 4,4 |
129 4,5 |
231 4,6 |
1 5,1 |
9 5,2 |
41 5,3 |
129 5,4 |
321 5,5 |
681 5,6 |
1 6,1 |
11 6,2 |
61 6,3 |
231 6,4 |
681 6,5 |
1683 6,6 |
๋ฐ์ ์๋ ๊ฒ์ ์ขํ์ด๊ณ , ์์ ์งํ ๊ธ์จ๋ ๊ฒฝ์ฐ์ ์์ด๋ค. 1,1์ 1๋ก ์์ํ์ฌ ๋ค์ ์ขํ๋ค์ ๊ฒฝ์ฐ์ ์๋ (x-1,y)+(x,y-1)+(x-1,y-1)์ ๊ฐ์ผ๋ก ๊ตฌํ๋ค. ๊ทธ๋ฆฌ๊ณ dp ํ ์ด๋ธ์ ์ ์ฅํ๋ฉด ๊ทธ ์ฐ์ฐ์ ๋ ์ด์ ์ ํ ์ ์๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋จ, ๋์ ๊ณํ๋ฒ์ด๋ค. ๋ฐ๋ณต๋๋ ์ฐ์ฐ์ ํ์ง ์๋ ๊ฒ!!!
๐ ํ์ด
ํ์ด ํด์์ ์ ์๋ ๋ด์ฉ์ ๊ทธ๋๋ก ์ฝ๋๋ก ๋ฐ๊พธ๋ฉด ๋๋ค. x์ถ์ด 1์ผ๋์, y์ถ์ด 1์ผ๋ (x-1,y)+(x,y-1)+(x-1,y-1)์ ํด๋ indexerror๊ฐ ๋ฐ์ํ์ง ์๊ฒ dp ํ ์ด๋ธ์ 0,0๋ถํฐ ๋ง๋ค์๋ค.
๐ป ์ฝ๋
n,m = map(int, input().split())
dp = [[0 for i in range(n+1)] for j in range(m+1)] # ์ฃผ์ด์ง n๊ณผm ์ผ๋ก dp ํ
์ด๋ธ ์์ฑ
dp[1][1] =1# 1,1 ์ผ๋ ๊ฒฝ์ฐ์ ์๋ 1
for i in range(1, m+1):
for j in range(1, n+1):
dp[i][j] += dp[i-1][j] + dp[i-1][j-1] + dp[i][j-1] # (x,y) + (x-1,y-1) + (x,y-1)
print(dp[m][n]%(10**9+7)) # n,m ์ผ ๋ ๊ฒฝ์ฐ์ ์%10**9+7 ์ถ๋ ฅ
๐ ๋ฌธ์ ๋งํฌ : ๋ค์ด๋๋ฏน์ด ๋ญ์์?
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1926๋ฒ: ๊ทธ๋ฆผ - ํ์ด์ฌ (0) | 2022.06.08 |
---|---|
[๋ฐฑ์ค] 2448๋ฒ: ๋ณ์ฐ๊ธฐ - ํ์ด์ฌ (0) | 2022.06.06 |
[๋ฐฑ์ค] 1012๋ฒ: ์ ๊ธฐ๋ ๋ฐฐ์ถ - ํ์ด์ฌ (0) | 2022.06.03 |
[๋ฐฑ์ค] 1697๋ฒ: ์จ๋ฐ๊ผญ์ง - ํ์ด์ฌ (0) | 2022.06.02 |
[๋ฐฑ์ค] 2775๋ฒ: ๋ถ๋ ํ์ฅ์ด ๋ ํ ์ผ - ํ์ด์ฌ (0) | 2022.06.02 |