practivceAlgorithm/백준

[백준][Python] 17069 17070 파이프 옮기기1, 2

findTheValue 2021. 9. 15. 10:39

https://www.acmicpc.net/problem/17070

 

17070번: 파이프 옮기기 1

유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의

www.acmicpc.net

 

파이프가 대각선으로 움직일때 벽을 긁으면 안된다. 즉 벽이있으면 대각선 처리를 하지 않는다.

 

import sys
input = sys.stdin.readline

N = int(input())
house = [list(map(int, input().split())) for _ in range(N)]
# 오른쪽에서 오거나 왼쪽에서 오거나 대각선으로 오는 경우의 dp
dp = [[[0,0,0] for _ in range(N)] for _ in range(N)]
for i in range(N):
    if house[0][i]:
        break
    dp[0][i][0] = 1
for i in range(1,N):
    for j in range(2,N):
        if not house[i][j]:
            dp[i][j][0] = dp[i][j-1][0] + dp[i][j-1][1]
            if not house[i-1][j] and not house[i][j-1]:
                dp[i][j][1] = sum(dp[i-1][j-1])
            dp[i][j][2] = dp[i-1][j][1] + dp[i-1][j][2]
print(sum(dp[N-1][N-1]))