ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
๊ธฐ์กด์ ๊ทธ๋ํ ๋ฌธ์ ๋ค์ ์, ํ, ์ข, ์ฐ๋ก ํ์ํ์ฌ ํ๋์ ๋ชฉํ์ ๋ํด ์ด๋ ๊ฐ๋ฅํ์ง ํ๋จํ๋ ๋ฌธ์ ๋ค์ด์๋ค. ํ์ง๋ง ์ด ๋ฌธ์ ๋ 2๊ฐ์ ๊ตฌ์ฌ๋ค์ด ๊ธฐ์ธ๊ธฐ์ ๋ฐ๋ผ ์, ํ, ์ข, ์ฐ๋ก ๋์์ ์ด๋ํ๋ ๊ฒฝ์ฐ์ ๋นจ๊ฐ ๊ตฌ์ฌ๋ถํฐ ๋จผ์ ํ์ถ ๊ฐ๋ฅํ์ง๋ฅผ ํ๋จํ๋ ๋ฌธ์ ์ด๋ค. ๋ํ, ์๋ ํ์ 10ํ๋ฅผ ์ด๊ณผํ์ง ์๊ณ ํ์ถํ ์ ์์ด์ผ ํ๋ค.
๋ค๋ฅธ ๊ทธ๋ํ ๋ฌธ์ ๋ค์ ํ ๋ฒ์ ํ ์นธ์ฉ ์, ํ, ์ข, ์ฐ๋ก ์ด๋ ๊ฐ๋ฅํ์ง ํ์ ํ์์ง๋ง ์ด ๋ฌธ์ ์์๋ ๊ธฐ์ธ๊ธฐ์ ๋ฐ๋ผ ๊ตฌ์ฌ์ด ๋๊น์ง ๊ตด๋ฌ๊ฐ๊ฒ ๋๋ฏ๋ก, ๋ฒฝ์ ๋ง๋๊ธฐ ์ ๊น์ง ๊ณ์ํด์ ์ด๋ํ ์ ์๋ค๋ ์ฐจ์ด์ ์ด ์๋ค. ๋ํ, ๊ฒฝ์ฐ์ ์ ์ค์ ํ๋ ๊ตฌ์ฌ์ด ๋จผ์ ํ์ถํ๋ ๊ฒฝ์ฐ๋ ์ ์ธํ์ฌ์ผ ํ๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def move_beads(loc, dx, dy):
cnt = 0
while graph[loc[X] + dx][loc[Y] + dy] != '#':
if graph[loc[X]][loc[Y]] == 'O':
break
loc = [loc[X] + dx, loc[Y] + dy]
cnt += 1
return loc, cnt
def bfs(start):
q = deque([start])
dirs = ((-1, 0), (1, 0), (0, 1), (0, -1))
while q:
red, blue, cnt = q.popleft()
if cnt > 10:
break
for dx, dy in dirs:
next_red, red_cnt = move_beads(red, dx, dy)
next_blue, blue_cnt = move_beads(blue, dx, dy)
# ํ๋์ ๊ตฌ์ฌ์ด ๋จผ์ ํ์ถํ๋ ๊ฒฝ์ฐ์ ์ ์ ์ธ.
if graph[next_blue[X]][next_blue[Y]] == 'O':
continue
# ๋นจ๊ฐ ๊ตฌ์ฌ์ด ๋จผ์ ํ์ถ ๊ฐ๋ฅํ ๊ฒฝ์ฐ
if graph[next_red[X]][next_red[Y]] == 'O':
return 1
if next_red == next_blue:
if red_cnt > blue_cnt:
next_red = [next_red[X] - dx, next_red[Y] - dy]
else:
next_blue = [next_blue[X] - dx, next_blue[Y] - dy]
r_x, r_y = next_red; b_x, b_y = next_blue
if not visited[r_x][r_y][b_x][b_y]:
visited[r_x][r_y][b_x][b_y] = True
q.append([[r_x, r_y], [b_x, b_y], cnt + 1])
return 0
if __name__ == '__main__':
X, Y = 0, 1
n, m = map(int, stdin.readline().split())
graph = []
red = blue = None
for i in range(n):
graph.append(list(stdin.readline().strip()))
if red is None and 'R' in graph[i]:
red = [i, graph[i].index('R')]
if blue is None and 'B' in graph[i]:
blue = [i, graph[i].index('B')]
visited = \
[[[[False] * m for _ in range(n)] for _ in range(m)] for _ in range(n)]
visited[red[X]][red[Y]][blue[X]][blue[Y]] = True
print(bfs([red, blue, 1]))
๊ตฌ์ฌ ํ์ถ 2์ ๋ฌธ์ ๋ ํด๋น ์ฝ๋์์ bfs์ ๋ฐํ๊ฐ์ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ -1, ์ฐพ์ ๊ฒฝ์ฐ cnt ๊ฐ์ ๋ฐํํ๋ฉด ๋๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 3055 ํ์ถ (0) | 2020.08.11 |
---|---|
๋ฐฑ์ค: 15644 ๊ตฌ์ฌ ํ์ถ 3 (0) | 2020.08.08 |
๋ฐฑ์ค: 1987 ์ํ๋ฒณ (0) | 2020.08.06 |
๋ฐฑ์ค: 16198 ์๋์ง ๋ชจ์ผ๊ธฐ (0) | 2020.08.06 |
๋ฐฑ์ค: 2580 ์ค๋์ฟ (0) | 2020.08.05 |