본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 3055 탈출

by Alan_Kim 2023. 9. 4.
728x90
반응형

https://www.acmicpc.net/problem/3055

 

3055번: 탈출

사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제

www.acmicpc.net

 

문제 해결

  • BFS를 이용하여 푸는 문제라는 것은 쉽게 알 수 있다.
  • 문제는 물과 고슴도치가 동시에 이동한다는 것이다.
  • 그러나 운이 좋게 문제를 잘 보면 물이 올 지역에 고슴도치가 이동할 수 없다고 나오므로 물부터 이동시킨 후 고슴도치를 이동시키면 된다.
  • 고슴도치가 더이상 움직이지 못하면 탈출하지 못하는 것이고 그전에 탈출구를 찾으면 탈출하는데 걸리는 시간을 출력하면 된다.

 

CODE

import sys
input = sys.stdin.readline
from collections import deque

R, C = map(int, input().split())
board = []
dx = [-1,1,0,0]
dy = [0,0,-1,1]
pque = deque() # person deque
wque = deque() # water deque
for i in range(R):
    X = [str(c) for c in input().rstrip()]
    for j in range(C):
        if X[j] == '*':
            wx, wy = i,j
            wque.append((wx,wy))
        if X[j] == 'S':
            sx, sy = i,j
            pque.append((sx,sy))
        if X[j] =='D':
            ex, ey = i,j
    board.append(X)
if sx==ex and sy==ey:
    print(0)
else:
    ans = 1
    while len(pque) !=0:
        twque = deque()
        for i in range(len(wque)):
            wnx, wny = wque[i]
            for j in range(4):
                nwx = wnx + dx[j]
                nwy = wny + dy[j]
                if 0<=nwx<R and 0<=nwy<C and board[nwx][nwy] != 'D' and board[nwx][nwy] != 'X' and board[nwx][nwy] != '*':
                    board[nwx][nwy] = '*'
                    twque.append((nwx,nwy))
        wque = twque
        tpque = deque()
        for i in range(len(pque)):
            pnx, pny = pque[i]
            for j in range(4):
                pwx = pnx + dx[j]
                pwy = pny + dy[j]
                if 0<=pwx<R and 0<=pwy<C and board[pwx][pwy] == 'D':
                    print(ans)
                    exit()
                if 0<=pwx<R and 0<=pwy<C and board[pwx][pwy] == '.':
                    board[pwx][pwy] ='S'
                    tpque.append((pwx,pwy))
        pque = tpque
        ans += 1          
    else:
        print("KAKTUS")
728x90
반응형

댓글