즐거운 PS 👩‍💻🥰

[백준-파이썬] 14940: 쉬운 최단거리

dalin❤️ 2021. 11. 1. 20:17

[문제 보러 가기](https://www.acmicpc.net/problem/14940

평범한 BFS 문제였다.
visited를 만들어서 방문 체크 겸, 거리 체크를 했다.
처음에는 '원래 갈 수 없는 땅인 위치는 0으로 출력'해야 하는데, 원래 갈 수 없는 땅이고 도달할 수 없는 위치면 -1로 출력해서 틀렸다.
그리고 i, j 오타가 나서 틀리다가 맞았다..! i, j.. 비슷하게 생겨서 주의해야 겠다.

import collections
import sys

input = sys.stdin.readline

MIIS = lambda: map(int, input().split())
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]

n, m = MIIS()
arr = list(list(MIIS()) for _ in range(n))


# 출발점 찾기
def find_start():
    for i in range(n):
        for j in range(m):
            if arr[i][j] == 2:
                return i, j


start_i, start_j = find_start()

# 출발점에서 다른 곳까지 가는 거리들을 계산
visited = [[-1] * m for _ in range(n)]

q = collections.deque()
q.append((start_i, start_j))
visited[start_i][start_j] = 0

while q:
    i, j = q.popleft()

    for k in range(4):
        ni, nj = i + directions[k][0], j + directions[k][1]
        if 0 <= ni < n and 0 <= nj < m and visited[ni][nj] == -1:  # 방문하지 않은 곳
            if arr[ni][nj] == 1:  # 갈 수 있는 땅이면
                visited[ni][nj] = visited[i][j] + 1
                q.append((ni, nj))
            elif arr[ni][nj] == 0: # 갈 수 없는 땅이라도 방문 체크
                visited[ni][nj] = 0

# 출력
for i in range(n):
    for j in range(m):
        if arr[i][j] == 0:  # 원래 갈 수 없는 땅인 위치는 항상 0 출력
            print(0, end=' ')
        else:
            print(visited[i][j], end=' ')
    print()
728x90