BOJ - 14497

주의·2024년 2월 5일
0

boj

목록 보기
183/214

백준 문제 링크
주난의 난(難)

❓접근법

  1. 오랜만에 BFS를 사용했다.
  2. 기본 BFS 소스코드를 전개하는데
    살짝 다른 점은 다음 좌표가
  • 0일 경우 appendleft 해서 먼저 탐색하게 만든다.
    answer[nx][ny] = answer[x][y]
  • 1 or #일 경우 append
    answer[nx][ny] = answer[x][y] + 1
  1. 주난이의 위치로 bfs 함수를 실행시키고,
    answer에서 범인의 좌표를 출력하면 끝!

👌🏻코드

from collections import deque

n, m = map(int, input().split())

graph = []

x1, y1, x2, y2 = map(int, input().split())

for _ in range(n):
    graph.append(list(input()))
    
visited = [[False] * m for _ in range(n)]
answer = [[0] * m for _ in range(n)]

dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]

def bfs(x, y):
    
    queue = deque()
    queue.append((x,y))
    
    visited[x][y] = True
    answer[x][y] = 0
    
    while queue:
        x, y = queue.popleft()
        
        for d in range(4):
            nx = x + dx[d]
            ny = y + dy[d]
            
            if (0 <= nx < n) and (0 <= ny < m) and not visited[nx][ny]:
                visited[nx][ny] = True
                
                if graph[nx][ny] == '0':
                    queue.appendleft((nx,ny))
                    answer[nx][ny] = answer[x][y]
                    
                else:
                    queue.append((nx,ny))
                    answer[nx][ny] = answer[x][y] + 1
                    
bfs(x1-1, y1-1)

print(answer[x2-1][y2-1])

0개의 댓글