처음 생각했던 아이디어
그 다음 생각했던 아이디어
개선한 아이디어
가로,세로,대각선 함수를 각각 만드는 것이 아니라 bfs 함수 하나만을 이용하여 탐색한다.
가능한 방향에는 deque에 y,x뿐만 아니라 방향 정보도 넣어줌
넣어준 방향에 따라 다시 갈 수 있는 방향 탐색
도착지점에 도착하면 갯수 + 1
시간 초과 0%
개선한 아이디어(2)
결론
코드
def dfs(y,x,shape):
global cnt
if y == N-1 and x == N-1:
cnt += 1
return
if shape == 0:
if x + 1 < N and not matrix[y][x+1]:
dfs(y,x+1,0)
if y + 1 < N and x + 1 < N and not matrix[y+1][x+1] and not matrix[y][x+1] and not matrix[y+1][x]:
dfs(y+1,x+1,2)
elif shape == 1:
if y + 1 < N and not matrix[y+1][x]:
dfs(y+1,x,1)
if y + 1 < N and x + 1 < N and not matrix[y+1][x+1] and not matrix[y][x+1] and not matrix[y+1][x]:
dfs(y+1,x+1,2)
elif shape == 2 :
if x + 1 < N and not matrix[y][x+1]:
dfs(y,x+1,0)
if y + 1 < N and not matrix[y+1][x]:
dfs(y+1,x,1)
if y + 1 < N and x + 1 < N and not matrix[y+1][x+1] and not matrix[y][x+1] and not matrix[y+1][x]:
dfs(y+1,x+1,2)
N = int(input())
matrix = [list(map(int,input().split())) for _ in range(N)]
cnt = 0
dfs(0,1,0)
print(cnt)