๐ก ์กฐ๊ฑด ๋ฐ ํ์ด
R * C
ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์
๋ ฅ๋ฐ์ ์งํ์ด๊ฐ ๋ฏธ๋ก์์ ํ์ถ ํ ์ ์๋์ง ๊ตฌํ๋ ๋ฌธ์ .
R * C
ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์ต๋ 1000 * 1000
- BFS ์ ํ์ ๋ฌธ์
- ๋ฏธ๋ก์ ๋ฒฝ์ ๋ถ์ด์์ผ๋ฉด ํ์ถ์ด ๊ฐ๋ฅํ๋ค.
- ๋ถ์ ๋จผ์ ์ง๋ฅธ ํ, ์งํ์ด์ ์ด๋ ๊ฐ๋ฅ ๊ฒฝ๋ก๋ฅผ ์ดํ๋ค.
- ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํตํด ํ ๋ฒ ๊ฐ๋ ๊ณณ์ ๋ค์ ๊ฐ์ง ์๋๋ค.
๐ฅ ์์ค ์ฝ๋
from sys import stdin
from collections import deque
dx, dy = [1, -1, 0, 0], [0, 0, 1, -1]
r, c = map(int, stdin.readline().split())
board, res = [], 0
# ์งํ์ด์ ๋ถ๋ ๊ณณ ์ ์ฅํ ๋ณ์
F, J = deque(), deque()
for i in range(r):
data = list(stdin.readline().rstrip())
for j in range(c):
if data[j] == 'J':
J.append((i, j))
if data[j] == 'F':
F.append((i, j))
board.append(data)
def bfs():
global F, J, res
while 1:
res += 1
temp = []
while F:
x, y = F.popleft()
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if -1 < nx < r and -1 < ny < c:
if board[nx][ny] == '.' or board[nx][ny] == '$':
temp.append((nx, ny))
board[nx][ny] = 'F'
F = deque(temp)
temp = []
while J:
x, y = J.popleft()
if x == 0 or y == 0 or x == r - 1 or y == c - 1:
return res
for i in range(4):
nx, ny = dx[i] + x, dy[i] + y
if -1 < nx < r and -1 < ny < c and board[nx][ny] == '.':
temp.append((nx, ny))
board[x][y] = '$'
board[nx][ny] = 'J'
J = deque(temp)
if not J:
return False
if bfs():
print(res)
else:
print('IMPOSSIBLE')
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
4 4
####
#JF#
#..#
#..#
์คํ๊ฒฐ๊ณผ
3
โจ๏ธ ๋ฌธ์ ํ์ด
- ๊ณผ์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ์ฉ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ์๊ฐ์ด๊ณผ์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ด๋ค.
- ์์ ๋ฐฐ์ด์ ๋ง๋ค์ด ๋ถ๊ณผ ์งํ์ด๊ฐ ์์ง์ผ ๋ ์ด๋ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ฅผ ๋ชจ๋ ๋ฃ์ด์ฃผ๊ณ while ๋ฌธ์ด ์ข
๋ฃ๋์์ ๋ ํ์ ์ฝ์
- ์งํ์ด๊ฐ ์ง๋๊ฐ ๊ณณ์
'$'
๋ก ๋ณ๊ฒฝ
- ๋ถ์
'$'
์ '.'
๋ฅผ, ์งํ์ด๋ ์ค๋ก์ง '.'
๋ง ๊ฐ ์ ์๊ฒ ์ฒ๋ฆฌ.
- ์งํ์ด๊ฐ ์์ง์ผ ๋, Queue ์์ ํ์ฌ ์งํ์ด์ ์ขํ๋ฅผ ๋ฝ์, ๋ฒฝ์ ์์นํ๊ณ ์๋ค๋ฉด ํ์ถ ์ฑ๊ณต.
if x == 0 or y == 0 or x == r - 1 or y == c - 1:
- ๋ ์ด์ ์งํ์ด๊ฐ ์์ง์ผ ๊ฒฝ๋ก๊ฐ ์๋ค๋ฉด ํ์ถ ์คํจ
if not J:
๐พ ๋๋์
- BFS ์ ํ ๋ฌธ์ ์์ ๋์ด๋๊ฐ ์ค๋ฒ2 ~ ๊ณจ๋4 ๋ก๋ง ์ฌ๋ผ๊ฐ๋ ํค๋งค๋ ๋ชจ์ต์ ๋ณด์๋ค.
- ๋ฐฉ๋ฌธ์ฒ๋ฆฌ์ฉ ๋ฐฐ์ด์ ๋ค์ํ ์ฌ์ฉ๋ฒ์ ๋์ ์ตํ๊ณ ์์ฉํ ์ค ์์์ผ๊ฒ ๋ค.
- ๋ฐฉ๋ฌธ์ฒ๋ฆฌ์ฉ ๋ฐฐ์ด์ ์ฌ์ฉํ๊ธฐ ์ , ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฐ ๊ฐ์ธ์ง ์ด ์ค ์์์ผ๊ฒ ๋ค.
- ๋ฌธ์ ๋ฅผ ๋๋ฆ๋๋ก ํด์ํ๊ณ ์์ถํ๋ ๋ฅ๋ ฅ์ ๋ ํค์์ผ๊ฒ ๋ค.