ㄱfrom collections import deque
dx, dy = [1,-1,0,0],[0,0,1,-1]
def bfs(arr, R, C, St, Dst, Water):
    cnt = 0
    while St:
        cnt += 1
        # Water move
        for l in range(len(Water)):
            i_, j_ = Water.popleft()
            for k in range(4):
                i = i_ + dx[k]
                j = j_ + dy[k]
                if 0<=i<R and 0<=j<C:
                    if arr[i][j] == '.' or arr[i][j] == 'S':
                        arr[i][j] = '*'
                        Water.append([i,j])
        # Hedgehog move
        for l in range(len(St)):
            i_, j_ = St.popleft()
            for k in range(4):
                i = i_ + dx[k]
                j = j_ + dy[k]
                if i == Dst[0][0] and j == Dst[0][1]:
                    return cnt
                if 0<=i<R and 0<=j<C:
                    if arr[i][j] == '.':
                        arr[i][j] = 'S'
                        St.append([i,j])
    return "KAKTUS"
R, C = map(int,input().split())
arr = [[0] * C for _ in range(R)]
St = deque()
Water = deque()
Dst = deque()
for i in range(R):
    line = input()
    for j in range(C):
        arr[i][j] = line[j]
        if arr[i][j] == 'D':
            Dst.append([i,j])
        elif arr[i][j] == 'S':
            St.append([i,j])
        elif arr[i][j] == '*':
            Water.append([i,j])
print(bfs(arr,R,C, St, Dst, Water))
물에서 한 번, 고슴도치가 한 번 번갈아가면서 bfs를 해주면 됩니다.
물이 찰 예정인 칸도 이동할 수 없어서 물에서 먼저 bfs를 합니다!
물이 이동할 때 arr[i][j] == 'S'인 경우도 물이 찰 수 있어야 할 것 같은데
저 조건이 없어도 동작은 합니다... 반례가 있을 것 같은데 찾아보고 싶네요!
| 백준 1966 - 프린터 큐 Python (0) | 2020.11.04 | 
|---|---|
| 백준 10597 - 순열 장난 Python (0) | 2020.11.03 | 
| 백준 14503 - 로봇 청소기 Python (0) | 2020.11.03 | 
| 백준 2606 - 바이러스 C++ (0) | 2019.11.25 | 
| 프로그래머스 Level 1 - 체육복(C++) (0) | 2019.11.24 |