1. 문제
2. 접근 방법
구슬 탈출 1과 동일하지만 다른게 있다면 count를 출력해야한다는 것 !
따라서 접근 방법은 maeng2world.tistory.com/62요기를 참고해주십사
그리고 !!!!! 출력 부분에 10번이 넘어가면 -1을 출력하라고 나와있다ㅠ
꼭 정확히 읽을 것
3. 코드
python
from collections import deque
def move(_x, _y, _dx, _dy, _c):
while board[_y+_dy][_x+_dx] != '#' and board[_y][_x] != 'O':
_x += _dx
_y += _dy
_c += 1
return _x, _y, _c
def bfs():
while q:
rx, ry, bx, by, c = q.popleft()
if c > 10:
break
for i in range(4):
nrx, nry, nrc = move(rx, ry, dx[i], dy[i], c)
nbx, nby, nbc = move(bx, by, dx[i], dy[i], c)
# 만약 파란색이 골에 빠졌다면 -> 무시
if board[nby][nbx] == 'O':
continue
# 만약 빨간색이 골에 빠졌다면 -> cnt 출력하고 return
if board[nry][nrx] == 'O':
print(c)
return
# 만약 빨간색과 파란색이 같은 위치라면
if nrx == nbx and nry == nby:
if nrc > nbc:
nrx -= dx[i]
nry -= dy[i]
else:
nbx -= dx[i]
nby -= dy[i]
# 만약 방문하지 않은 곳이라면
if not visited[nry][nrx][nby][nbx]:
q.append((nrx, nry, nbx, nby, c+1))
visited[nry][nrx][nby][nbx] = True
print(-1)
N, M = map(int, input().split())
board = [list(input()) for _ in range(N)]
dx, dy = (0, 1, 0, -1), (-1, 0, 1, 0)
visited = [[[[False]*M for _ in range(N)] for _ in range(M)] for _ in range(N)]
for y in range(N):
for x in range(M):
if board[y][x] == 'R':
_rx, _ry = x, y
elif board[y][x] == 'B':
_bx, _by = x, y
q = deque()
q.append((_rx, _ry, _bx, _by, 1))
visited[_ry][_rx][_by][_bx] = True
bfs()
4. 마치며
원래 구슬탈출2 푸려다가 시리즈길래 1부터 풀었던 것임다 ^-^~! (큰그림)
여튼 문제를 꼼꼼히 읽자!
손에 익을 때까지 화이륑
'Algorithm > Python' 카테고리의 다른 글
[백준 14499] 주사위 굴리기 (0) | 2021.04.16 |
---|---|
[백준 12100] 2048(Easy) (0) | 2021.04.15 |
[백준 1580] 위치 바꾸기 (0) | 2021.04.14 |
[백준 13459] 구슬 탈출 (0) | 2021.04.14 |
[백준 17090] 미로 탈출하기 (0) | 2021.04.14 |