๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[BAEKJOON python] 13460_๊ตฌ์ฌํ์ถ ๋ณธ๋ฌธ
728x90
๋ฐ์ํ
๊ตฌ์ฌํ์ถ
๊ตฌ์ฌ ํ์ถ์ ์ง์ฌ๊ฐํ ๋ณด๋์ ๋นจ๊ฐ ๊ตฌ์ฌ๊ณผ ํ๋ ๊ตฌ์ฌ์ ํ๋์ฉ ๋ฃ์ ๋ค์, ๋นจ๊ฐ ๊ตฌ์ฌ์ ๊ตฌ๋ฉ์ ํตํด ๋นผ๋ด๋ ๊ฒ์
๋ณด๋์ ์ธ๋ก ํฌ๊ธฐ๋ N, ๊ฐ๋ก ํฌ๊ธฐ๋ M, 1×1ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค
๊ฐ์ฅ ๋ฐ๊นฅ ํ๊ณผ ์ด์ ๋ชจ๋ ๋งํ์ ธ ์๊ณ , ๋ณด๋์๋ ๊ตฌ๋ฉ์ด ํ๋
๋นจ๊ฐ ๊ตฌ์ฌ๊ณผ ํ๋ ๊ตฌ์ฌ์ ํฌ๊ธฐ๋ ๋ณด๋์์ 1×1ํฌ๊ธฐ์ ์นธ์ ๊ฐ๋ ์ฑ์ฐ๋ ์ฌ์ด์ฆ์ด๊ณ , ๊ฐ๊ฐ ํ๋์ฉ ๋ค์ด๊ฐ ์๋ค
๋นจ๊ฐ ๊ตฌ์ฌ์ ๊ตฌ๋ฉ์ ํตํด์ ๋นผ๋ด๋ ๊ฒ์ด๋ค
์ด๋, ํ๋ ๊ตฌ์ฌ์ด ๊ตฌ๋ฉ์ ๋ค์ด๊ฐ๋ฉด ์ ๋๋ค
๊ตฌ์ฌ์ ์์ผ๋ก ๊ฑด๋๋ฆด ์๋ ์๊ณ , ์ค๋ ฅ์ ์ด์ฉํด์ ์ด๋ฆฌ ์ ๋ฆฌ ๊ตด๋ ค์ผ ํ๋ค
์ผ์ชฝ์ผ๋ก ๊ธฐ์ธ์ด๊ธฐ, ์ค๋ฅธ์ชฝ์ผ๋ก ๊ธฐ์ธ์ด๊ธฐ, ์์ชฝ์ผ๋ก ๊ธฐ์ธ์ด๊ธฐ, ์๋์ชฝ์ผ๋ก ๊ธฐ์ธ์ด๊ธฐ์ ๊ฐ์ ๋ค ๊ฐ์ง ๋์
๊ฐ๊ฐ์ ๋์์์ ๊ณต์ ๋์์ ์์ง์ธ๋ค
๋นจ๊ฐ ๊ตฌ์ฌ์ด ๊ตฌ๋ฉ์ ๋น ์ง๋ฉด ์ฑ๊ณต์ด์ง๋ง, ํ๋ ๊ตฌ์ฌ์ด ๊ตฌ๋ฉ์ ๋น ์ง๋ฉด ์คํจ
๋นจ๊ฐ ๊ตฌ์ฌ๊ณผ ํ๋ ๊ตฌ์ฌ์ด ๋์์ ๊ตฌ๋ฉ์ ๋น ์ ธ๋ ์คํจ
๋นจ๊ฐ ๊ตฌ์ฌ๊ณผ ํ๋ ๊ตฌ์ฌ์ ๋์์ ๊ฐ์ ์นธ์ ์์ ์ ์๋ค
๋นจ๊ฐ ๊ตฌ์ฌ๊ณผ ํ๋ ๊ตฌ์ฌ์ ํฌ๊ธฐ๋ ํ ์นธ์ ๋ชจ๋ ์ฐจ์ง
๊ธฐ์ธ์ด๋ ๋์์ ๊ทธ๋งํ๋ ๊ฒ์ ๋ ์ด์ ๊ตฌ์ฌ์ด ์์ง์ด์ง ์์ ๋ ๊น์ง
๋ณด๋์ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์ต์ ๋ช ๋ฒ ๋ง์ ๋นจ๊ฐ ๊ตฌ์ฌ์ ๊ตฌ๋ฉ์ ํตํด ๋นผ๋ผ ์ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ
10๋ฒ ์ดํ๋ก ์์ง์ฌ์ ๋นจ๊ฐ ๊ตฌ์ฌ์ ๊ตฌ๋ฉ์ ํตํด ๋นผ๋ผ ์ ์์ผ๋ฉด -1์ ์ถ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ๋ณด๋์ ์ธ๋ก, ๊ฐ๋ก ํฌ๊ธฐ๋ฅผ ์๋ฏธํ๋ ๋ ์ ์ N, M (3 ≤ N, M ≤ 10)
N๊ฐ์ ์ค์ ๋ณด๋์ ๋ชจ์์ ๋ํ๋ด๋ ๊ธธ์ด M์ ๋ฌธ์์ด
'.'์ ๋น ์นธ, '#'์ ๊ณต์ด ์ด๋ํ ์ ์๋ ์ฅ์ ๋ฌผ ๋๋ ๋ฒฝ, 'O'๋ ๊ตฌ๋ฉ์ ์์น, 'R'์ ๋นจ๊ฐ ๊ตฌ์ฌ์ ์์น, 'B'๋ ํ๋ ๊ตฌ์ฌ์ ์์น
์ ๋ ฅ๋๋ ๋ชจ๋ ๋ณด๋์ ๊ฐ์ฅ์๋ฆฌ์๋ ๋ชจ๋ '#'์ด ์๋ค
๊ตฌ๋ฉ์ ๊ฐ์๋ ํ ๊ฐ ์ด๋ฉฐ, ๋นจ๊ฐ ๊ตฌ์ฌ๊ณผ ํ๋ ๊ตฌ์ฌ์ ํญ์ 1๊ฐ
from collections import deque
# ์ธ๋ก, ๊ฐ๋ก ํฌ๊ธฐ
n, m = map(int, input().split())
graph = []
dx = [-1 ,0, 1, 0]
dy = [0, 1, 0, -1]
rx, ry, bx, by = 0, 0, 0, 0
visited = [[[[False] * m for _ in range(n)] for _ in range(m)] for _ in range(n)]
for i in range(n) :
data = list(input())
graph.append(data)
for d in range(len(data)) :
if data[d] == "R" :
rx, ry = i, d
elif data[d] == "B" :
bx, by = i, d
def move(x, y, dx, dy) :
cnt = 0
# '#'์ ๊ณต์ด ์ด๋ํ ์ ์๋ ์ฅ์ ๋ฌผ ๋๋ ๋ฒฝ, 'O'๋ ๊ตฌ๋ฉ์ ์์น
while graph[x+dx][y+dy] != "#" and graph[x][y] != "O" :
# ์์ง์ด๋ ๊ฒ์ ์ข
๋ฃํ ํ ์์ง์ธ ํ์ ์์น์ ์์ง์ธ ํ์
x += dx
y += dy
cnt += 1
return x, y, cnt
def bfs(rx, ry, bx, by) :
queue = deque()
queue.append((rx, ry, bx, by, 1))
visited[rx][ry][bx][by] = True
while queue :
r_x, r_y, b_x, b_y, depth = queue.popleft()
if depth > 10 :
break
for i in range(4) :
r_nx, r_ny, r_cnt = move(r_x, r_y, dx[i], dy[i])
b_nx, b_ny, b_cnt = move(b_x, b_y, dx[i], dy[i])
# ๊ธฐ์ธ๋ฆฐ ํ ํ๋ ๊ตฌ์ฌ์ ์์น๊ฐ ๊ตฌ๋ฉ์ด ์๋๋ฉด์ ๋นจ๊ฐ ๊ตฌ์ฌ์ ์์น๊ฐ ๊ตฌ๋ฉ์ด๋ผ๋ฉด ๊ธฐ์ธ๋ฆฐ ํ์(depth)
if graph[b_nx][b_ny] != "O" :
if graph[r_nx][r_ny] == "O" :
return depth
# ๋นจ๊ฐ, ํ๋ ๊ตฌ์ฌ ๊ฐ์ด ์์ ์ ์์
if r_nx == b_nx and r_ny == b_ny :
if r_cnt > b_cnt :
r_nx -= dx[i]
r_ny -= dy[i]
else :
b_nx -= dx[i]
b_ny -= dy[i]
if not visited[r_nx][r_ny][b_nx][b_ny] :
visited[r_nx][r_ny][b_nx][b_ny] = True
queue.append((r_nx, r_ny, b_nx, b_ny, depth + 1))
return -1
print(bfs(rx, ry, bx, by))
์์ ์ ๋ ฅ
7 7
#######
#...RB#
#.#####
#.....#
#####.#
#O....#
#######
์์ ์ถ๋ ฅ
5
์ฐ์ 4์ฐจ์๋ฆฌ์คํธ ์ฒ์ ์จ๋ณด๋ใ
์ ๊ธฐํ๋ค
๊ฐ์ฌํฉ๋๋ค.
728x90
๋ฐ์ํ
'๐ฆฅ ์ฝํ > BAEKJOON' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON C++] 11718_๊ทธ๋๋ก ์ถ๋ ฅํ๊ธฐ (0) | 2023.06.28 |
---|---|
[BAEKJOON python] 17822_์ํ ๋๋ฆฌ๊ธฐ (0) | 2023.04.09 |
[BAEKJOON python] 21609_์์ด ์คํ๊ต (1) | 2023.04.08 |
[BAEKJOON python] 21608_์์ด ์ด๋ฑํ๊ต (0) | 2023.04.08 |
[BAEKJOON python] 19237_์ด๋ฅธ ์์ด (0) | 2023.04.08 |
Comments