Skip to content

Commit c39f92d

Browse files
committed
b14940 - 좌표 최단거리
1 parent 346b76a commit c39f92d

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# 14940번: 쉬운 최단거리 - <img src="https://static.solved.ac/tier_small/10.svg" style="height:20px" /> Silver I
2+
3+
<!-- performance -->
4+
5+
<!-- 문제 제출 후 깃허브에 푸시를 했을 때 제출한 코드의 성능이 입력될 공간입니다.-->
6+
7+
<!-- end -->
8+
9+
## 문제
10+
11+
[문제 링크](https://boj.kr/14940)
12+
13+
14+
<p>지도가 주어지면 모든 지점에 대해서 목표지점까지의 거리를 구하여라.</p>
15+
16+
<p>문제를 쉽게 만들기 위해 오직 가로와 세로로만 움직일 수 있다고 하자.</p>
17+
18+
19+
20+
## 입력
21+
22+
23+
<p>지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000)</p>
24+
25+
<p>다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이다. 입력에서 2는 단 한개이다.</p>
26+
27+
28+
29+
## 출력
30+
31+
32+
<p>각 지점에서 목표지점까지의 거리를 출력한다.&nbsp;원래 갈 수 없는 땅인 위치는 0을 출력하고, 원래 갈 수 있는 땅인 부분 중에서 도달할 수 없는 위치는 -1을 출력한다.</p>
33+
34+
35+
36+
## 소스코드
37+
38+
[소스코드 보기](쉬운%20최단거리.py)
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# ************************************************************************** #
2+
# #
3+
# ::: ::: ::: #
4+
# Problem Number: 14940 :+: :+: :+: #
5+
# +:+ +:+ +:+ #
6+
# By: ro1864 <boj.kr/u/ro1864> +#+ +#+ +#+ #
7+
# +#+ +#+ +#+ #
8+
# https://boj.kr/14940 #+# #+# #+# #
9+
# Solved: 2024/12/04 10:14:52 by ro1864 ### ### ##.kr #
10+
# #
11+
# ************************************************************************** #
12+
import sys
13+
from collections import deque
14+
input = sys.stdin.readline
15+
16+
adj = [(0, 1), (0, -1), (1, 0), (-1, 0)]
17+
18+
def bfs(g, dist, s, x_max, y_max):
19+
sx, sy, sd = s
20+
q = deque([])
21+
dist[sy][sx] = sd
22+
q.append(s)
23+
while q:
24+
x, y, d = q.popleft()
25+
for dx, dy in adj:
26+
nx, ny, nd = x + dx, y + dy, d + 1
27+
if nx < 0 or nx > x_max or ny < 0 or ny > y_max:
28+
continue
29+
if g[ny][nx] == 1 and (dist[ny][nx] == -1 or dist[ny][nx] > nd):
30+
dist[ny][nx] = nd
31+
q.append((nx, ny, nd))
32+
33+
n, m = map(int, input().split())
34+
g = []
35+
dist = [[] for _ in range(n)]
36+
start = ()
37+
for i in range(n):
38+
row = list(map(int, input().split()))
39+
try:
40+
start = (row.index(2), i, 0)
41+
except ValueError:
42+
pass
43+
g.append(row)
44+
for j in range(m):
45+
dist[i].append(0 if row[j] == 0 else -1)
46+
47+
bfs(g, dist, start, m-1, n-1)
48+
49+
for i in range(n):
50+
print(*dist[i])

0 commit comments

Comments
 (0)