https://www.acmicpc.net/problem/2665
from collections import deque
# with open('./data.txt', 'r') as file:
# lines = file.read().strip().split("\n")
# N = int(lines[0])
N = int(input())
graph = []
dist = [[-1] * N for _ in range(N)]
moveX = [1, 0, -1, 0]
moveY = [0, -1, 0, 1]
for i in range(N):
# graph.append(list(map(int, lines[i+1])))
graph.append(list(map(int, input())))
def bfs(x, y):
Q = deque()
Q.append((x, y))
dist[y][x] = 0
while Q:
nowX, nowY = Q.popleft()
for i in range(4):
nX = nowX + moveX[i]
nY = nowY + moveY[i]
if(nX >= N or nX < 0 or nY >= N or nY < 0):
continue
# 첫 방문이라면
if(dist[nY][nX] == -1):
if(graph[nY][nX] == 1):
dist[nY][nX] = dist[nowY][nowX]
Q.appendleft((nX, nY))
else:
dist[nY][nX] = dist[nowY][nowX] + 1
Q.append((nX, nY))
bfs(0, 0)
print(dist[N-1][N-1])
1261 문제와 뭐가 다른건지는 잘 모르겠지만
상하좌우를 탐색하며 1이라면 이전 노드값을 그대로 넣어주고
(이전노드로부터 현재까지 오는데 쓰인 값이 동일하기 때문에)
아니라면 이전노드 값 + 1을 해주며 목적지까지 가는데 필요한 값을 계속
다음 노드에 전해주면서 가면 된다.