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

 

14497번: 주난의 난(難)

주난이는 크게 화가 났다. 책상 서랍 안에 몰래 먹으려고 숨겨둔 초코바가 사라졌기 때문이다. 주난이는 미쳐 날뛰기 시작했다. 사실, 진짜로 뛰기 시작했다. ‘쿵... 쿵...’ 주난이는 점프의 파

www.acmicpc.net

풀이

BFS를 토대로 문제를 풀어주었습니다. 주난이가 움직이지않고 제자리에서 파동을 보내서 초코바를 훔쳐간 범인을 찾기에 파동의 움직임을 구현해주시면 됩니다. 항상 파동이 전달 될 수 있는 "0"부터 방문할 수 있게 .appendlef()를 사용하여서 학생이 없는 자리인 "1"과 학생이 있는 자리인 1과 구분하여 방문 할 수 있게 코딩해주시면 됩니다.

 

코드

# 14497번 주난의 난(難)
from collections import deque
import sys

def bfs(s_x, s_y):
    dxys = ((0,1), (0,-1), (1,0), (-1,0))
    queue = deque([[s_x, s_y]])
    visited[s_y][s_x] = 0
    while queue:
        c_x, c_y = queue.popleft()
        for  dx, dy in dxys:
            n_x = c_x + dx
            n_y = c_y + dy
            if 0 <= n_x < M and 0 <= n_y < N and visited[n_y][n_x] == -1:
                if grid[n_y][n_x] == "1" or grid[n_y][n_x] == "#":
                    visited[n_y][n_x] = visited[c_y][c_x] + 1
                    queue.append([n_x, n_y])
                else:
                    visited[n_y][n_x] = visited[c_y][c_x]
                    queue.appendleft([n_x, n_y])   # appendleft()를 통해서 방문할 수 있는 0부터 방문할 수 있게 deque에 넣어줍니다.

N, M = map(int, sys.stdin.readline().split())
y1, x1, y2, x2 = map(int, sys.stdin.readline().split())
grid = [list(sys.stdin.readline().rstrip()) for _ in range(N)]
visited = [[-1 for _ in range(M)] for _ in range(N)]
bfs(x1-1, y1-1)
print(visited[y2-1][x2-1])

출력결과

개발자 성현