문제
https://www.acmicpc.net/problem/3055
3055번: 탈출
사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제
www.acmicpc.net
코드
from collections import deque
r,c=map(int, input().split())
INF=int(1e10)
dx=[-1,1,0,0]
dy=[0,0,-1,1]
visited=[[0]*c for _ in range(r)]
array=[list(input().rstrip()) for _ in range(r)]
dr,dc=0,0
queue=deque()
for i in range(r):
for j in range(c):
if array[i][j]=='*':
queue.append((i,j))
for i in range(r):
for j in range(c):
if array[i][j]=='S':
queue.append((i,j))
if array[i][j]=='D':
dr,dc=i,j
while queue:
x,y=queue.popleft()
if dr==x and dc==y:
break
if array[x][y]=='*':
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if 0<=nx<r and 0<=ny<c and array[nx][ny]!='X' and visited[nx][ny]==0 and array[nx][ny]!='D' and array[nx][ny]!='S':
array[nx][ny]='*'
visited[nx][ny]=INF
queue.append((nx,ny))
else:
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if 0<=nx<r and 0<=ny<c and visited[nx][ny]==0 and array[nx][ny]!='*' and array[nx][ny]!='X':
visited[nx][ny]=visited[x][y]+1
queue.append((nx,ny))
if visited[dr][dc]==0 or visited[dr][dc]==INF:
print("KAKTUS")
else:
print(visited[dr][dc])
'문제풀이 > DFS & BFS' 카테고리의 다른 글
[파이썬] [BFS] 백준 2206 벽 부수고 이동하기 (0) | 2022.04.09 |
---|---|
[파이썬] [BFS] 백준 7569 토마토 (0) | 2022.04.02 |
[파이썬] [DFS] 백준 2667 단지번호붙이기 (0) | 2022.03.01 |
[파이썬] [BFS] Pro 경주로 건설 (0) | 2022.02.23 |
[파이썬] [DFS] Pro 여행경로 (0) | 2022.02.19 |