https://www.acmicpc.net/problem/13460
13460๋ฒ: ๊ตฌ์ฌ ํ์ถ 2
์ฒซ ๋ฒ์งธ ์ค์๋ ๋ณด๋์ ์ธ๋ก, ๊ฐ๋ก ํฌ๊ธฐ๋ฅผ ์๋ฏธํ๋ ๋ ์ ์ N, M (3 ≤ N, M ≤ 10)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์ ๋ณด๋์ ๋ชจ์์ ๋ํ๋ด๋ ๊ธธ์ด M์ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ์ด ๋ฌธ์์ด์ '.', '#', 'O', 'R', 'B'
www.acmicpc.net
๋ฌธ์ ํด๊ฒฐ
1. ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฅ ๋ฐ๋๋ค. -> ์ฒ์์ ํ ๋ฒ์ ๋ฐ๊ณ ๊ทธ ๋ค์์ 'R', 'B'๋ฅผ ์ฐพ์๋ณด๋ ค ํ์ผ๋ ๊ทธ๋ฅ ํฌ๋ฌธ์์์ ์ ๋ ฅ ๋ฐ์ผ๋ฉด์ ์ฐพ์๋ ๋๊ฒ ๋ค ์ถ์ด์ ์ฐพ์ ํ์ ๋น์นธ์ผ๋ก ๋ฐ๊ฟ์ฃผ์๋ค.
2. ์ด๋ฒ ๋ฌธ์ ๋ ๋ฐฐ์ด ํ๋ํ๋์ฉ ํ์ธํด๊ฐ๋ฉด์ ํธ๋ ๊ฒ ์ข๊ธฐ ๋๋ฌธ์ bfs๋ก ๋ฌธ์ ํ์ด
3. bfs๋ ์ฃผ๋ก ํ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋ฃ์ ์์๋๋ก popํ๊ธฐ ์ํด์ deque ์ฌ์ฉ
4. ๊ธฐ์ธ์ผ ๋ ํ ๋ฒ ์์ง์ธ ๊ฒ ์นด์ดํธ 1์ ์๋์ง๋ง, ๋์ค์ ์ด๋ค ๊ตฌ์ฌ์ด ๋จผ์ ์์นํ๋์ง ์๊ธฐ ์ํด์ moving์ ์ฌ์ฉํด์ ๋ช ๋ฒ ์ด๋ํ๋์ง๋ ์นด์ดํธํด์ฃผ์๋ค. ํ ๋ฒ ๊ธฐ์ธ์๋ค๋ ๊ฑด queue์ ๊ฐ์ด ๋ฃ์ด์ค (count)
5. blue๊ฐ ๋จผ์ ๊ตฌ๋ฉ์ ๋ค์ด๊ฐ์ ๋ ์คํจ์ด๋ฏ๋ก ๋ค์ ์งํ (continue)
6. red๊ฐ ๋ค์ด๊ฐ๋ฉด count+1 ๋ฆฌํด
7. ์ด์ ๊ณผ ๋๊ฐ์ ์๋ฆฌ๋ผ๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๊ฑฐ๊ธฐ ๋๋ฌธ์ continueํด์ฃผ๊ณ ์๋๋ผ๋ฉด ๋ค์ ๊ทธ ์ขํ๋ฅผ queue์ ์ ๋ ฅ
from collections import deque
# . # 0 R B => ๋น์นธ, ์ฅ์ ๋ฌผ, ๊ตฌ๋ฉ, ๋นจ๊ฐ๊ตฌ์ฌ, ํ๋๊ตฌ์ฌ
N, M = map(int, input().split())
arr = []
red_x, red_y = 0, 0
blue_x, blue_y = 0, 0
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
for i in range(N):
arr.append(list(input().strip()))
for j in range(len(arr[i])):
if arr[i][j] == 'R':
red_x, red_y = i, j
arr[i][j] = '.'
elif arr[i][j] == 'B':
blue_x, blue_y = i, j
arr[i][j] = '.'
def move(x, y, dx, dy):
next_x, next_y = x, y
moving = 0
while True:
if arr[next_x+dx][next_y+dy] != '#' and arr[next_x+dx][next_y+dy] != 'O':
next_x += dx
next_y += dy
moving += 1
else:
break
return next_x, next_y, moving
def bfs():
q = deque()
q.append((red_x, red_y, blue_x, blue_y, 0))
while q:
rx, ry, bx, by, count = q.popleft()
if count >= 10:
break
for k in range(4):
next_rx, next_ry, Rmove = move(rx, ry, dx[k], dy[k])
next_bx, next_by, Bmove = move(bx, by, dx[k], dy[k])
if arr[next_bx+dx[k]][next_by+dy[k]] == 'O':
continue
if arr[next_rx+dx[k]][next_ry+dy[k]] == 'O':
return (count+1)
if next_rx == next_bx and next_ry == next_by:
if Rmove > Bmove:
next_rx -= dx[k]
next_ry -= dy[k]
else:
next_bx -= dx[k]
next_by -= dy[k]
if next_rx == rx and next_ry == ry and next_bx == bx and next_by == by:
continue
q.append((next_rx, next_ry, next_bx, next_by, count+1))
return -1
result = bfs()
print(result)
์ ๋ง ์ด๋ฐ์๋,, ์๊ณ ๋ณด๋ x,y ๋ฅผ ์๋ชป์ผ๋ต๋๋ค ๐
'Coding' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ๋ก๋์ ์ต๊ณ ์์์ ์ต์ ์์ (0) | 2023.03.16 |
---|---|
[Programmers] ๋คํธ ๊ฒ์ (0) | 2023.03.15 |
[Programmers] ์คํจ์จ (0) | 2023.03.14 |
[BOJ] 14501๋ฒ: ํด์ฌ (0) | 2023.03.13 |
[Programmers] ์์ ๋ง๋ค๊ธฐ (0) | 2023.03.13 |