We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 14494๋ฒˆ: ๋‹ค์ด๋‚˜๋ฏน์ด ๋ญ์˜ˆ์š”? - ํŒŒ์ด์ฌ

Redddy 2022. 6. 5. 22:01

๐Ÿ”ˆ ๋ฌธ์ œ

์•ˆ๋…•ํ•˜์„ธ์š”~ ์ €๋Š” ์˜ค๋Š˜ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(๋™์  ๊ณ„ํš๋ฒ•)์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ์šฑ์ œ์˜ˆ์š”! ๋‹ค์ด๋‚˜๋ฏน์€ ์ด๋ฆ„์ด ์—„์ฒญ ๊ฑฐ์ฐฝํ•˜์ง€๋งŒ ์‚ฌ์‹ค ์ด๋ฆ„์— ๋น„ํ•ด ๊ฐœ๋…์€ ๊ฐ„๋‹จํ•˜๋‹ต๋‹ˆ๋‹ค. ๋‹ค์ด๋‚˜๋ฏน์˜ ๊ธฐ๋ณธ ์•„์ด๋””์–ด๋Š” ๋ฐ”๋กœ ์ด์ „์— ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•ด์„œ (= ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ์‚ฌ์šฉํ•ด์„œ, ์–ด๋ ค์šด ๋ง๋กœ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํ•œ๋‹ค๊ณ  ํ•ด์š”) ๋ฐ˜๋ณต๋˜๋Š” ๋˜‘๊ฐ™์€ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๊ฑฐ์˜ˆ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ, 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 ์ถœ๋ ฅ

 

๐Ÿ”— ๋ฌธ์ œ๋งํฌ : ๋‹ค์ด๋‚˜๋ฏน์ด ๋ญ์˜ˆ์š”?

 

14494๋ฒˆ: ๋‹ค์ด๋‚˜๋ฏน์ด ๋ญ์˜ˆ์š”?

(1, 1)์—์„œ (n, m)์— ๋„๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜์—ฌ๋ผ. ๋‹จ, ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์—„์ฒญ ์ปค์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ 1,000,000,007(=109+7)๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net