Algorithm/Python

[백준 13460] 구슬 탈출2

🥭맹2 2021. 4. 15. 00:08

1. 문제

www.acmicpc.net/problem/13460

 

12100번: 2048 (Easy)

첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2

www.acmicpc.net

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