정말 수십개의 테스트 케이스를 돌렸는데도 다 맞았는데 백준 이녀석은 게속 틀렸다고 해 삼일째 당황스러웠다. 해결하고나니 너무 허무하당...
필요 요소
1. 데이터 담을 2차원 배열
2. 고슴이가 갈 길을 찾기 위한 큐
3. 물이 갈 길을 찾기 위한 큐
로직 순서
1. 데이터를 2차원 배열에 담으면서 S이면 시작하면 도슴이큐에 *이면 물큐에 담아준다.
2. 날짜 구별을 해주기 위해 while문 돌기 전 물큐의 길이를 체크하고
3. 그 길이만큼 while문을 돌리며 좌우상하에 빈칸인지 확인한다.
4. 빈칸이면 칸을 먹는다.
5. 고슴이도 그렇게 해준다.
6. 만약 고슴이가 D를 만나면 날짜를 출력해주고 끝낸다.
import sys
from collections import deque
R,C = map(int, sys.stdin.readline().split())
li= [[0]*C for _ in range(R)]
gosum = deque()
water = deque()
for i in range (R):
tmp = sys.stdin.readline()
for j in range(C):
li[i][j] = tmp[j]
if tmp[j] == 'S':
gosum.append((j,i))
li[i][j] = 0
elif tmp[j] == '*':
water.append((j,i))
dx ,dy = [0,0,1,-1], [1,-1,0,0]
flag = False
while True:
water_len = len(water)
while water_len:
x,y = water.popleft()
water_len -=1
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
if 0<= nx < C and 0<= ny <R and li[ny][nx] == '.':
li[ny][nx] = '*'
water.append((nx,ny))
if len(gosum) ==0:
print('KAKTUS')
break
gosum_len = len(gosum)
while gosum_len:
x,y = gosum.popleft()
gosum_len-=1
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
if 0<= nx < C and 0<= ny <R:
if li[ny][nx] == 'D':
print(li[y][x] +1)
flag = True
break
elif li[ny][nx] == '.':
li[ny][nx] = li[y][x] +1
gosum.append((nx,ny))
if flag:
break
if flag:
break