[문제 보러 가기](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
'즐거운 PS 👩💻🥰' 카테고리의 다른 글
[백준-파이썬] 10828: 스택 (0) | 2021.11.04 |
---|---|
[백준-파이썬] 14719: 빗물 (0) | 2021.11.02 |
[백준-파이썬] 17404: RGB거리 2 (0) | 2021.10.29 |
[백준-파이썬] 16940 : BFS 스페셜 저지 (0) | 2021.10.28 |
[백준-파이썬] 1149 : RGB 거리 (0) | 2021.10.27 |