백준 2665 python [미로만들기]

인지용·2025년 1월 12일
0

알고리즘

목록 보기
20/46
post-thumbnail

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을 해주며 목적지까지 가는데 필요한 값을 계속
다음 노드에 전해주면서 가면 된다.

profile
한-줄

0개의 댓글