dp는 항상 어렵다 ^^...
→, ↓의 두 방향으로 움직일 수 있을 때
(1,1)에서 (n,m)까지 도달하는 경우의 수는
dp[x][y]= dp[x-1][y] + dp[x][y-1]
해결할 수도 있다.
→, ↓, ↘의 세 방향으로 움직일 수 있을 때,
(1,1)에서 (n,m)까지 도달하는 경우의 수는
dp[x][y]= dp[x-1][y] + dp[x][y-1] + dp[x-1][y-1]
위 점화식을 이용하여 구할 수 있다.
즉 갈 수 있는 방향에 따라
더해지는 인수가 달라지는 것을 유의하기
dp[1][1]에 1을 넣어서 초기화한 후
해당 점화식을 실행시킨다.
n=3, m=2이면
0 | 0 | 0 |
0 | 1 | 1 |
0 | 1 | 3 |
0 | 1 | 5 |
n, m = map(int, input().split())
dp = [[0 for _ in range(m + 1)] for _ in range(n + 1)]
dp[1][1] = 1
for x in range(1, n + 1):
for y in range(1, m + 1):
if x==1 and y==1:
continue
dp[x][y] = dp[x - 1][y] + dp[x - 1][y - 1] + dp[x][y - 1]
print(dp[n][m]%1000000007)
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[9507] Generations of Tribbles in python (0) | 2022.01.26 |
---|---|
[3079] 입국 심사 in python (0) | 2022.01.23 |
[17086] 아기상어 2 in python (0) | 2022.01.19 |
[2548] 대표 자연수 in python (0) | 2022.01.19 |
[14495] 피보나치 비스무리한 수열 in python (0) | 2022.01.19 |