Hikenny25

6일차 - 미로의 거리 본문

SW Expert Academy/Programming - Intermediate

6일차 - 미로의 거리

hikenny 2023. 12. 14. 10:25
from collections import deque
delta = [[0,1], [0,-1], [1,0], [-1,0]]

for t in range(int(input())):
    n = int(input())
    maze = [list(map(int, input().rstrip())) for _ in range(n)]

    dept_point = tuple()
    objt_point = tuple()

    for i in range(n):
        for j in range(n):
            if maze[i][j] == 2:
                dept_point = (i, j)
            elif maze[i][j] == 3:
                objt_point = (i, j)

    q = deque([dept_point])
    predecessor = [[0] * n for _ in range(n)]

    while q:
        k = q.pop()
        maze[k[0]][k[1]] = 9

        for dx, dy in delta:
            r = k[0] + dx
            c = k[1] + dy

            if 0 <= r < n and 0 <= c < n and (maze[r][c] == 0 or maze[r][c] == 3):
                q.appendleft((r,c))
                maze[r][c] = 9
                predecessor[r][c] = predecessor[k[0]][k[1]] + 1

    if predecessor[objt_point[0]][objt_point[1]] == 0:
        print(f"#{t+1} 0")
    else:
        print(f"#{t+1} {predecessor[objt_point[0]][objt_point[1]] - 1}")

 

간단한 BFS 최단거리 문제이다! 옛날에 했던 코드 보면서 다시 BFS 감을 깨우치고 작성햇다

간단하게 갔다온 곳 표시해주고 predecessor에 거리 저장해주면 되는 문제이다~

'SW Expert Academy > Programming - Intermediate' 카테고리의 다른 글

6일차 - 노드의 거리  (0) 2023.12.16
6일차 - 피자 굽기  (0) 2023.12.16
6일차 - 회전  (0) 2023.12.13
5일차 - 배열 최소 합  (0) 2023.12.12
5일차 - 토너먼트 카드게임  (1) 2023.12.12
Comments