쉬운 최단거리(백준 14940번)
💡 **Check Point !
( 해당사항 ✓체크 )
막힘 없이 수월하게 풀린 문제인가? ✓
1시간이내로 풀렸던 문제인가?
1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
시간을 써도 도무지 풀 수 없는 문제인가?
솔루션을 찾아봤는가?
난이도 체감
최상
상✓
중✓
하
이해도
완벽히 이해✓
다소 헷갈리는 부분들이 있음
이해 못함
문제
지도가 주어지면 모든 지점에 대해서 목표지점까지의 거리를 구하여라.
문제를 쉽게 만들기 위해 오직 가로와 세로로만 움직일 수 있다고 하자.
나의 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import sys
from collections import deque
def BFS(my_map,x,y,visited,n,m):
dx=[-1,1,0,0]
dy=[0,0,-1,1]
visited[x][y]=True
my_map[x][y]=0
queue=deque()
queue.append((x,y))
while queue:
v=queue.popleft()
for i in range(4):
mx=v[0]+dx[i]
my=v[1]+dy[i]
if 0<=mx<n and 0<=my<m and not visited[mx][my] and my_map[mx][my]:
visited[mx][my]=True
queue.append((mx,my))
my_map[mx][my]=my_map[v[0]][v[1]]+1
return my_map
input=sys.stdin.readline
n,m=map(int,input().strip().split())
my_map=[]
visited=[[False]*m for _ in range(n)]
for n_i in range(n):
l=list(map(int,input().strip().split()))
my_map.append(l)
x=0
y=0
for i in range(n):
stop=0
for j in range(m):
if my_map[i][j]==2:
x=i
y=j
stop=1
break
if stop==1:
break
my_map=BFS(my_map,x,y,visited,n,m)
for i in range(n):
for j in range(m):
if my_map[i][j]==1 and not visited[i][j]:
print(-1,end=' ')
else:
print(my_map[i][j],end=' ')
print('')
- BFS를 사용하여 문제를 풀었다.
my_map
에서 기준점인 2의 위치를 찾고, 2의 위치를 기준으로 얼마의 거리가 떨어져 있는지,my_map
에 저장하는 형태로 하였다.- 위 작업을 끝낸 후,
my_map
에서 1의 값을 갖는데, 방문하지 않는 지점은 도달할 수 없는 지점이기 때문에 -1을 출력하도록 하였다.
This post is licensed under CC BY 4.0 by the author.