๋ฌธ์
์ฌ์
ํ ์ํ์ ๊ตฐ์ฃผ ์ด๋ฏผํ์ ๋๋์ด ๋ง๋ฒ ๊ตฌ์ฌ์ ์์ ๋ฃ์๊ณ , ๊ทธ ๋ฅ๋ ฅ์ ์คํํด๋ณด๊ธฐ ์ํด ๊ทผ์ฒ์ ํฐ๋ฑ์ฒ์ ํ์๋ฅผ ์ผ์ผํค๋ ค๊ณ ํ๋ค. ์ด ์ฒ์๋ ๊ณ ์ด๋์น๊ฐ ํ ๋ง๋ฆฌ ์ด๊ณ ์๋ค. ๊ณ ์ด๋์น๋ ์ ์ผ ์นํ ์น๊ตฌ์ธ ๋น๋ฒ์ ๊ตด๋ก ๊ฐ๋ฅํ ๋นจ๋ฆฌ ๋๋ง๊ฐ ํ์๋ฅผ ํผํ๋ ค๊ณ ํ๋ค.
ํฐ๋ฑ์ฒ์ ์ง๋๋ Rํ C์ด๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋น์ด์๋ ๊ณณ์ '.'๋ก ํ์๋์ด ์๊ณ , ๋ฌผ์ด ์ฐจ์๋ ์ง์ญ์ '*', ๋์ 'X'๋ก ํ์๋์ด ์๋ค. ๋น๋ฒ์ ๊ตด์ 'D'๋ก, ๊ณ ์ด๋์น์ ์์น๋ 'S'๋ก ๋ํ๋ด์ด์ ธ ์๋ค.
๋งค ๋ถ๋ง๋ค ๊ณ ์ด๋์น๋ ํ์ฌ ์๋ ์นธ๊ณผ ์ธ์ ํ ๋ค ์นธ ์ค ํ๋๋ก ์ด๋ํ ์ ์๋ค. (์, ์๋, ์ค๋ฅธ์ชฝ, ์ผ์ชฝ) ๋ฌผ๋ ๋งค ๋ถ๋ง๋ค ๋น์ด์๋ ์นธ์ผ๋ก ํ์ฅํ๋ค. ๋ฌผ์ด ์๋ ์นธ๊ณผ ์ธ์ ํด์๋ ๋น์ด์๋ ์นธ(์ ์ด๋ ํ ๋ณ์ ๊ณต์ )์ ๋ฌผ์ด ์ฐจ๊ฒ ๋๋ค. ๋ฌผ๊ณผ ๊ณ ์ด๋์น๋ ๋์ ํต๊ณผํ ์ ์๋ค. ๋, ๊ณ ์ด๋์น๋ ๋ฌผ๋ก ์ฐจ์๋ ๊ตฌ์ญ์ผ๋ก ์ด๋ํ ์ ์๊ณ , ๋ฌผ๋ ๋น๋ฒ์ ์๊ตด๋ก ์ด๋ํ ์ ์๋ค.
ํฐ๋ฑ์ฒ์ ์ง๋๊ฐ ์ฃผ์ด์ก์ ๋, ๊ณ ์ด๋์น๊ฐ ์์ ํ๊ฒ ๋น๋ฒ์ ๊ตด๋ก ์ด๋ํ๊ธฐ ์ํด ํ์ํ ์ต์ ์๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๊ณ ์ด๋์น๋ ๋ฌผ์ด ์ฐฐ ์์ ์ธ ์นธ์ผ๋ก ์ด๋ํ ์ ์๋ค. ์ฆ, ๋ค์ ์๊ฐ์ ๋ฌผ์ด ์ฐฐ ์์ ์ธ ์นธ์ผ๋ก ๊ณ ์ด๋์น๋ ์ด๋ํ ์ ์๋ค. ์ด๋ํ ์ ์์ผ๋ฉด ๊ณ ์ด๋์น๊ฐ ๋ฌผ์ ๋น ์ง๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์ R๊ณผ C๊ฐ ์ฃผ์ด์ง๋ค.
๋ค์ R๊ฐ ์ค์๋ ํฐ๋ฑ์ฒ์ ์ง๋๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๋ฌธ์ ์์ ์ค๋ช
ํ ๋ฌธ์๋ง ์ฃผ์ด์ง๋ค. 'D'์ 'S'๋ ํ๋์ฉ๋ง ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ณ ์ด๋์น๊ฐ ๋น๋ฒ์ ๊ตด๋ก ์ด๋ํ ์ ์๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ์ถ๋ ฅํ๋ค. ๋ง์ฝ, ์์ ํ๊ฒ ๋น๋ฒ์ ๊ตด๋ก ์ด๋ํ ์ ์๋ค๋ฉด, "KAKTUS"๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ
3 6
D...*.
.X.X..
....S.
์์ ์ถ๋ ฅ
6
ํด๊ฒฐ ๋ฐฉ๋ฒ
๋จผ์ ๊ณ ์ด๋์น์ ์์น๋ฅผ ์ฐพ์ queue์ ๋ฃ์ด์ค๋ค.
๊ทธ ๋ค์ ๋ฌผ์ ์์น๋ค์ ์ฐพ์ queue์ ๋ฃ์ด์ค๋ค.
์ ์์๋ก queue์ ๋ฃ์ด์ฃผ๋ฉด ๊ณ ์ด๋์น๊ฐ ๋จผ์ ์ด๋ํ๊ณ ์ดํ ๋ฌผ์ด ์ด๋ํ๋ ๊ณผ์ ์ ์๋์ผ๋ก ๋ฐ๋ณตํ ์ ์
import sys
from collections import deque
input = sys.stdin.readline
r,c = map(int,input().split())
map = []
queue = deque()
visited = [[0]*c for _ in range(r) ]
direction = [(1,0), (0,1), (-1,0), (0,-1)]
for i in range(r):
map.append(list(input().rstrip()))
# ๊ณ ์ด๋์น ์์น ์ฐพ๊ธฐ
for i in range(r):
if "S" in map[i]:
sx,sy = (i, map[i].index("S"))
queue.append((sx,sy))
# ๋ฌผ ์์น ์ฐพ๊ธฐ
for i in range(r):
if "*" in map[i]:
queue.append((i, map[i].index("*")))
# ๋น๋ฒ์ ๊ตด ์์น
for i in range(r):
if "D" in map[i]:
bx,by = (i, map[i].index("D"))
break
def checkValid(x,y):
return 0 <= x < r and 0 <= y < c
def bfs(x,y):
visited[x][y] = 1
while queue:
for _ in range(len(queue)):
cx,cy = queue.popleft()
if map[cx][cy] == 'D':
break
for dx, dy in direction:
nx, ny = cx + dx, cy + dy
if checkValid(nx,ny):
if map[cx][cy] == 'S' and (map[nx][ny] == '.' or map[nx][ny] == 'D'):
visited[nx][ny] = visited[cx][cy] + 1
map[nx][ny] = "S"
queue.append((nx,ny))
elif map[cx][cy] == '*' and (map[nx][ny] == '.' or map[nx][ny] == 'S'):
map[nx][ny] = '*'
queue.append((nx,ny))
bfs(sx,sy)
if visited[bx][by]:
print(visited[bx][by] - 1)
else:
print("KAKTUS")
'๐์ฝ๋ฉํ ์คํธ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2304 - ์ฐฝ๊ณ ๋ค๊ฐํ (Python) (0) | 2024.10.27 |
---|---|
[๋ฐฑ์ค] 1912 - ์ฐ์ํฉ (Python) (0) | 2024.10.27 |
[๋ฐฑ์ค] 14252 - ๊ณต์ฝ์์ด (Python) (0) | 2024.10.13 |
[๋ฐฑ์ค] 2247 - ์ค์ง์ ์ฝ์ (Python) (0) | 2024.10.13 |
[๋ฐฑ์ค] 1647 - ๋์ ๋ถํ ๊ณํ (Python) (0) | 2024.08.31 |