백준 17070: 파이프 옮기기 1 - dp, 3차원 배열(Python/파이썬)

Hyn·2025년 3월 11일

Algorithm(Py)

목록 보기
20/37

처음에 2차원 배열로 만들었다 중복 체크로 인해 오류 났었음.
가로/세로/대각선 어느 방향에서 왔는지에 따라 다르게 분기처리.

import sys
input = sys.stdin.readline

n = int(input())
wall = list(list(map(int, input().split())) for _ in range(n))
dp = [[[0] * 3 for _ in range(n)] for _ in range(n)]
dp[0][1][1] = 1
# 세로 / 가로/ 대각선

for r in range(n):
    for c in range(n):
        if wall[r][c]: # 벽이면 넘어가
            continue
        if r > 0: #세로
            dp[r][c][0] += dp[r-1][c][0] + dp[r-1][c][2]

        if c > 0: #가로
            dp[r][c][1] += dp[r][c-1][1] + dp[r][c-1][2]

        if r > 0 and c > 0 and not wall[r-1][c] and not wall[r][c-1]:
            dp[r][c][2] += sum(dp[r-1][c-1])

print(sum(dp[n-1][n-1]))
profile
쪼렙 개발자 하지만 포기하지 않지

0개의 댓글