๐ก ์กฐ๊ฑด
- ๊ตฌ์ฌ ํ์ถ์ ์ง์ฌ๊ฐํ ๋ณด๋์ ๋นจ๊ฐ ๊ตฌ์ฌ๊ณผ ํ๋ ๊ตฌ์ฌ์ ํ๋์ฉ ๋ฃ์ ๋ค์, ๋นจ๊ฐ ๊ตฌ์ฌ์ ๊ตฌ๋ฉ์ ํตํด ๋นผ๋ด๋ ๊ฒ์์ด๋ค.
- ๋ณด๋์ ์ธ๋ก ํฌ๊ธฐ๋ N, ๊ฐ๋ก ํฌ๊ธฐ๋ M์ด๊ณ , ํธ์์ 1ร1ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค.
N, M (3 โค N, M โค 10)
- ๊ฐ์ฅ ๋ฐ๊นฅ ํ๊ณผ ์ด์ ๋ชจ๋ ๋งํ์ ธ ์๊ณ , ๋ณด๋์๋ ๊ตฌ๋ฉ์ด ํ๋ ์๋ค.
๋นจ๊ฐ ๊ตฌ์ฌ๊ณผ ํ๋ ๊ตฌ์ฌ์ ํฌ๊ธฐ๋ ๋ณด๋์์ 1ร1ํฌ๊ธฐ์ ์นธ์ ๊ฐ๋ ์ฑ์ฐ๋ ์ฌ์ด์ฆ์ด๊ณ , ๊ฐ๊ฐ ํ๋์ฉ ๋ค์ด๊ฐ ์๋ค.
๊ฒ์์ ๋ชฉํ๋ ๋นจ๊ฐ ๊ตฌ์ฌ์ ๊ตฌ๋ฉ์ ํตํด์ ๋นผ๋ด๋ ๊ฒ์ด๋ค. ์ด๋, ํ๋ ๊ตฌ์ฌ์ด ๊ตฌ๋ฉ์ ๋ค์ด๊ฐ๋ฉด ์ ๋๋ค.
- ์ผ์ชฝ์ผ๋ก ๊ธฐ์ธ์ด๊ธฐ, ์ค๋ฅธ์ชฝ์ผ๋ก ๊ธฐ์ธ์ด๊ธฐ, ์์ชฝ์ผ๋ก ๊ธฐ์ธ์ด๊ธฐ, ์๋์ชฝ์ผ๋ก ๊ธฐ์ธ์ด๊ธฐ์ ๊ฐ์ ๋ค ๊ฐ์ง ๋์์ด ๊ฐ๋ฅํ๋ค.
- ๊ฐ๊ฐ์ ๋์์์ ๊ณต์ ๋์์ ์์ง์ธ๋ค. ๋นจ๊ฐ ๊ตฌ์ฌ์ด ๊ตฌ๋ฉ์ ๋น ์ง๋ฉด ์ฑ๊ณต์ด์ง๋ง, ํ๋ ๊ตฌ์ฌ์ด ๊ตฌ๋ฉ์ ๋น ์ง๋ฉด ์คํจ์ด๋ค.
๋นจ๊ฐ ๊ตฌ์ฌ๊ณผ ํ๋ ๊ตฌ์ฌ์ด ๋์์ ๊ตฌ๋ฉ์ ๋น ์ ธ๋ ์คํจ์ด๋ค. ๋นจ๊ฐ ๊ตฌ์ฌ๊ณผ ํ๋ ๊ตฌ์ฌ์ ๋์์ ๊ฐ์ ์นธ์ ์์ ์ ์๋ค.
๋นจ๊ฐ ๊ตฌ์ฌ๊ณผ ํ๋ ๊ตฌ์ฌ์ ํฌ๊ธฐ๋ ํ ์นธ์ ๋ชจ๋ ์ฐจ์งํ๋ค. ๊ธฐ์ธ์ด๋ ๋์์ ๊ทธ๋งํ๋ ๊ฒ์ ๋ ์ด์ ๊ตฌ์ฌ์ด ์์ง์ด์ง ์์ ๋ ๊น์ง์ด๋ค.
- ๋ณด๋์ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, 10๋ฒ ์ดํ๋ก ๋นจ๊ฐ ๊ตฌ์ฌ์ ๊ตฌ๋ฉ์ ํตํด ๋นผ๋ผ ์ ์๋์ง ๊ตฌํ๋ ๋ฌธ์ .
ํ๋ ๊ตฌ์ฌ์ ๊ตฌ๋ฉ์ ๋ฃ์ง ์์ผ๋ฉด์ ๋นจ๊ฐ ๊ตฌ์ฌ์ 10๋ฒ ์ดํ๋ก ์์ง์ฌ์ ๋นผ๋ผ ์ ์์ผ๋ฉด 1์ ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
- ๋ฌธ์์ด์ '.', '#', 'O', 'R', 'B' ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
'.'์ ๋น ์นธ์ ์๋ฏธํ๊ณ , '#'์ ๊ณต์ด ์ด๋ํ ์ ์๋ ์ฅ์ ๋ฌผ ๋๋ ๋ฒฝ์ ์๋ฏธํ๋ฉฐ, 'O'๋ ๊ตฌ๋ฉ์ ์์น๋ฅผ ์๋ฏธํ๋ค.
'R'์ ๋นจ๊ฐ ๊ตฌ์ฌ์ ์์น, 'B'๋ ํ๋ ๊ตฌ์ฌ์ ์์น์ด๋ค.
์
๋ ฅ๋๋ ๋ชจ๋ ๋ณด๋์ ๊ฐ์ฅ์๋ฆฌ์๋ ๋ชจ๋ '#'์ด ์๋ค. ๊ตฌ๋ฉ์ ๊ฐ์๋ ํ ๊ฐ ์ด๋ฉฐ, ๋นจ๊ฐ ๊ตฌ์ฌ๊ณผ ํ๋ ๊ตฌ์ฌ์ ํญ์ 1๊ฐ๊ฐ ์ฃผ์ด์ง๋ค.
- BFS, ๊ทธ๋ํํ์ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from collections import deque
n, m = map(int, input().split())
dx = [1, -1, 0, 0]
dy = [0, 0, -1, 1]
visit = [[[[False] * m for i in range(n)] for i in range(m)] for i in range(n)]
s = []
def move(i, j, dx, dy):
c = 0
while s[i + dx][j + dy] != "#" and s[i][j] != "O":
i += dx
j += dy
c += 1
return i, j, c
def bfs():
while q:
ri, rj, bi, bj, d = q.popleft()
if d > 10:
break
for i in range(4):
nri, nrj, rc = move(ri, rj, dx[i], dy[i])
nbi, nbj, bc = move(bi, bj, dx[i], dy[i])
if s[nbi][nbj] != "O":
if s[nri][nrj] == "O":
print(1)
return
if nri == nbi and nrj == nbj:
if rc > bc:
nri -= dx[i]
nrj -= dy[i]
else:
nbi -= dx[i]
nbj -= dy[i]
if not visit[nri][nrj][nbi][nbj]:
visit[nri][nrj][nbi][nbj] = True
q.append([nri, nrj, nbi, nbj, d + 1])
print(0)
for i in range(n):
a = list(input())
s.append(a)
for j in range(m):
if a[j] == "R":
ri, rj = i, j
if a[j] == "B":
bi, bj = i, j
q = deque()
q.append([ri, rj, bi, bj, 1])
visit[ri][rj][bi][bj] = True
bfs()
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
10 10
##########
#R#...##B#
#...#.##.#
#####.##.#
#......#.#
#.######.#
#.#....#.#
#.#.##...#
#O..#....#
##########
์คํ๊ฒฐ๊ณผ
1
โจ๏ธ ๋ฌธ์ ํ์ด
- ๊ตฌ์ฌ์ ๋ค ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๊ธฐ์ธ์์ ๋์ ์ํ๋ฅผ ํ์ ๋ฃ๊ณ ๊ด๋ฆฌํ๋ค.
- ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ ๊ณณ์๋ ๋ฐฉ๋ฌธํ์ง ์๋๋ก visit ๋ฆฌ์คํธ์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค.
- ํ์์ ๊บผ๋ด๊ณ , ์ด๋์ ์ํฌ ์ขํ๋ฅผ move ํจ์๋ก ๊ณ์ฐํด ํ๋๊ตฌ์ฌ์ด '0'์ด ์๋๊ณ ๋นจ๊ฐ ๊ตฌ์ฌ์ด '0'์ผ๋ก ๊ฐ ๊ฒฝ์ฐ 1์ ์ถ๋ ฅํ๋ค.
- ๋ง์ฝ ์์ง์์ ๋ ๋ ๊ตฌ์ฌ์ด ์ด๋ํ ์ขํ๊ฐ '0' ์ด๊ฑฐ๋ 10ํ๋ฅผ ์ด๊ณผํ์ฌ ๊ธฐ์ธ์๋ค๋ฉด 0์ ์ถ๋ ฅํ๋ค.
๐พ ๋ฐฐ์ด์
- ๊ตฌ์ฌ์ ์์ง์ฌ ์ํ๋ฅผ ๋ํ๋ด๊ณ , ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ๊ด๋ฆฌํ๋ ๊ฒ์ด ์์ด๋์ด๋ ์ฌ์ ๋ค.
- ๊ตฌํ์ด ์ด๋ ค์ ๋ค.