알고리즘/문제풀이
[Python] 백준 17129 윌리암슨수액빨이딱따구리가 정보섬에 올라온 이유
정찡이
2021. 10. 8. 15:53
728x90
1. 문제 링크
https://www.acmicpc.net/problem/17129
17129번: 윌리암슨수액빨이딱따구리가 정보섬에 올라온 이유
첫째 줄에 정보섬 2층의 크기 n과 m이 주어진다. (1 ≤ n,m ≤ 3000, 4 ≤ n×m ≤ 9×106) 이후 n행 m열에 걸쳐 0, 1, 2, 3, 4, 5로만 구성된 Ai,j가 주어진다. Ai,j와 Ai,j+1사이에 공백은 주어지지 않는다. 2,
www.acmicpc.net
2. 문제 요약
가장 가까운 음식에 도달하면 음식까지의 최단 거리를 출력한다.

3. 아이디어 정리
- bfs 사용
- 2인 경우 최초 큐에 넣어 준다.
- bfs를 사용하여 가까운 음식에 방문하는 경우 거리를 출력한다.
- 음식에 방문을 못한 경우 NIE를 출력한다.
4. 문제 풀이
4-1. 내 풀이
import sys
from collections import deque
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
n, m = map(int, sys.stdin.readline().split()) # 행,열
graph = [list(map(int, list(input()))) for _ in range(n)]
dq = deque()
for i in range(n):
for j in range(m):
if graph[i][j] == 2:
dq.append((i, j, 0)) # 딱따구리 위치, 거리
graph[i][j] = 1 # 방문 표시, 장애물로 변경
while dq:
x, y, dis = dq.popleft()
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if nx < 0 or ny < 0 or nx >= n or ny >= m:
continue
if graph[nx][ny] == 1: # 방문한 경우 or 장애물
continue
if graph[nx][ny] in [3, 4, 5]: # 음식인 경우 그만
print("TAK")
print(dis + 1)
exit()
dq.append((nx, ny, dis + 1))
graph[nx][ny] = 1
print("NIE")
5. 결론
- bfs를 이용하여 거리를 구하는 문제
반응형