Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- 2494
- blobaww
- 외국어이름
- 알고리즘
- 숫자 맞추기
- Classification
- MemoSprint
- 소프트웨어마에스트로
- 백준
- paper
- AI
- Fitmong
- 34031
- k개 사과 트리 노드만으로 배를 최대로 수확하기
- 25195
- 홀수 홀릭 호석
- 25977
- 2085
- 24501
- 1인개발
- barin tumor
- Australian Voting
- TaskQ
- God of Mine
- 7626
- 개발
- BOJ
- TripGuard
- 하이터치☆메모리
- 소마
Archives
- Today
- Total
iwanabethedev 님의 블로그
[boj 24501] blobaww 본문
문제를 풀고 나서 다른 분들의 풀이를 봤더니, 누적합이라는 방법으로 풀었더라구요... 저는 생각도 못했습니다...
저는 dp로 접근하면서 각 부분에서 유효한 경로가 몇개인지 세는 방식으로 접근했습니다.
더보기
import sys
input = sys.stdin.readline
MOD = 1_000_000_007
def solve():
N, M = map(int, input().split())
maps = [list(input().rstrip()) for _ in range(N)]
dp = [[[0]*3 for _ in range(M+1)] for _ in range(N+1)]
for i in range(1, N+1):
for j in range(1, M+1):
dp[i][j][0] = dp[i][j-1][0] + dp[i-1][j][0] - dp[i-1][j-1][0]
dp[i][j][1] = dp[i][j-1][1] + dp[i-1][j][1] - dp[i-1][j-1][1]
dp[i][j][2] = dp[i][j-1][2] + dp[i-1][j][2] - dp[i-1][j-1][2]
if maps[i-1][j-1] == "E":
dp[i][j][0] += 1
elif maps[i-1][j-1] == "S":
dp[i][j][1] += dp[i][j-1][0] + dp[i-1][j][0] - dp[i-1][j-1][0]
else:
dp[i][j][2] += dp[i][j-1][1] + dp[i-1][j][1] - dp[i-1][j-1][1]
dp[i][j][0] %= MOD
dp[i][j][1] %= MOD
dp[i][j][2] %= MOD
print(dp[-1][-1][-1])
return
def main():
solve()
return
if __name__ == "__main__":
main()

'알고리즘' 카테고리의 다른 글
| [boj 2494] 숫자 맞추기 (0) | 2026.03.31 |
|---|---|
| [boj 4419] Austrailam Voting (0) | 2026.03.29 |
| [boj 25195] Yes or yes (0) | 2026.03.28 |
| [boj 7626] 직사각형 (0) | 2026.03.27 |
| [20164] 홀수 홀릭 호석 (0) | 2026.03.26 |
