iwanabethedev 님의 블로그

[boj 24501] blobaww 본문

알고리즘

[boj 24501] blobaww

iwanabethedev 2026. 3. 30. 16:46

문제 링크

 

문제를 풀고 나서 다른 분들의 풀이를 봤더니, 누적합이라는 방법으로 풀었더라구요... 저는 생각도 못했습니다...

 

저는 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