πŸ‘©β€πŸŽ“κ³΅λΆ€ - 2024.02.15 μ½”λ”© λ¬Έμ œν’€μ΄

유령개·2024λ…„ 2μ›” 15일
0

PS-μ•Œκ³ λ¦¬μ¦˜2

λͺ©λ‘ 보기
29/34
post-thumbnail

14494번 - λ‹€μ΄λ‚˜λ―Ήμ΄ λ­μ—μš”?

이차원 배열이 μ£Όμ–΄μ§ˆ λ•Œ μ‹œμž‘μ μ—μ„œ λμ κΉŒμ§€ κ°€λŠ”λ°μ˜ μ΅œλ‹¨ 경둜의 수λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.
λ¬Έμ œμ—μ„œ ꡬ체적으둜 λͺ…μ‹œν•˜μ§€λŠ” μ•Šμ•˜λŠ”λ°, μ΅œλ‹¨ κ²½λ‘œκ°€ λ§žμŠ΅λ‹ˆλ‹€.


뢄석


λ¨Όμ € μ΅œλ‹¨ κ²½λ‘œλŠ” μ΄λŸ¬ν•œ μ‹μœΌλ‘œ μƒκ²ΌμŠ΅λ‹ˆλ‹€.
λ¬Έμ œμ—μ„œ 친절히 맨 μœ„μ—μ„œ μ•„λž˜,였λ₯Έμͺ½μœΌλ‘œλ§Œ κ°€λŠ” μ΅œλ‹¨ 경둜의 점화식은

dp[i][j] = dp[i-1][j] + dp[i][j-1]

이라고 언급이 λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.
ν•˜μ§€λ§Œ λ¬Έμ œλŠ” μ•„λž˜μ™€ 였λ₯Έμͺ½ 뿐만이 μ•„λ‹Œ λŒ€κ°μ„ μœΌλ‘œλ„ 이동이 κ°€λŠ₯ν•˜λ‹€κ³  λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.
κ·Έλž˜μ„œ 점화식에 λŒ€κ°μ„ μ„ μΆ”κ°€ν•˜κ²Œ 되면

dp[i][j] = dp[i-1][j] + dp[i][j-1] + dp[i-1][j-1]

λΌλŠ” 점화식 λ„μΆœμ΄ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

이제 코딩에 λ“€μ–΄κ°ˆκ»€λ°, μ£Όμ˜ν•  점은 μ„Έλ‘œμΆ•[0]κ³Ό κ°€λ‘œμΆ•[0]은 μœ„μ— 그림에 λ³΄μ‹œλ‹€μ‹œν”Ό μ „λΆ€ 1둜 μ΄ˆκΈ°ν™”λ₯Ό 진행해야 (ν•΄λ‹Ή ν–‰/렬은 μ ‘κ·Ό κ°€λŠ₯ν•œ 경우의 μˆ˜κ°€ 단 ν•˜λ‚˜) ν•΄λ‹Ή 점화식이 μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€.


μ½”λ”©

n,m = map(int,input().split())
dp = [[0]*m for _ in range(n)]
dp[0][0] = 1
for a in range(n):
    dp[a][0] = 1
for b in range(m):
    dp[0][b] = 1

이차원배열을 ν•˜λ‚˜ μ„ μ–Έν•˜κ³  κ°€λ‘œμΆ•μ˜ 0번째, μ„Έλ‘œμΆ•μ˜ 0번째 ν–‰/열을 μ „λΆ€ 1둜 μ΄ˆκΈ°ν™”ν•΄μ€μ‹œλ‹€.

for i in range(len(dp)):
    for j in range(len(dp[i])):
        if i == 0 or j == 0:
            continue
        else:
            dp[i][j] = dp[i-1][j] + dp[i][j-1] + dp[i-1][j-1] 

μ΄ˆκΈ°ν™”ν•œ 라인을 μ œμ™Έν•œ ꡬ간은 μ „λΆ€ λ„μΆœν•œ 점화식을 μ μš©μ‹œμΌœμ€μ‹œλ‹€.

print(dp[n-1][m-1]%1000000007)

1000000007둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€λ₯Ό λ¬Έμ œμ—μ„œ μš”κ΅¬ν•œλŒ€λ‘œ 좜λ ₯ν•΄μ€μ‹œλ‹€.




profile
ν•œλ¦ΌλŒ€ν•™κ΅ μ •λ³΄κ³Όν•™λŒ€ 2ν•™λ…„ μž¬ν•™μ€‘ / 윑ꡰ μ •λ³΄λ³΄ν˜Έλ³‘ 22-2κΈ°

0개의 λŒ“κΈ€