diff --git "a/CodingTest/CH5 DFSBFS/\353\257\270\353\241\234\355\203\210\354\266\234.py" "b/CodingTest/CH5 DFSBFS/\353\257\270\353\241\234\355\203\210\354\266\234.py" new file mode 100644 index 0000000..473f151 --- /dev/null +++ "b/CodingTest/CH5 DFSBFS/\353\257\270\353\241\234\355\203\210\354\266\234.py" @@ -0,0 +1,42 @@ +from collections import deque + +# N, M을 공백을 기준으로 구분하여 입력 받기 +n, m = map(int, input().split()) + +# 2차원 리스트의 맵 정보 입력 받기 +graph = [] +for i in range(n): + graph.append(list(map(int, input()))) + +# 이동할 네 가지 방향 정의 (상, 하, 좌, 우) +dx = [-1, 1, 0, 0] +dy = [0, 0, -1, 1] + +# BFS 소스코드 구현 +def bfs(x, y): + # 큐(Queue) 구현을 위해 deque 라이브러리 사용 + queue = deque() + queue.append((x, y)) + # 큐가 빌 때까지 반복하기 + while queue: + x, y = queue.popleft() + + for i in range(4): # 현재 위치에서 상하좌우 체크 + nx = x + dx[i] + ny = y + dy[i] + + if nx < 0 or nx >= n or ny < 0 or ny >= m: # 미로 찾기 공간을 벗어난 경우 무시 + continue + + if graph[nx][ny] == 0: # 괴물이 있는 경우 - 0인 경우 무시 + continue + + if graph[nx][ny] == 1: # 해당 노드를 처음 방문하는 경우에만 최단 거리 기록 + graph[nx][ny] = graph[x][y] + 1 + queue.append((nx, ny)) + + # 가장 오른쪽 아래까지의 최단 거리 반환 + return graph[n - 1][m - 1] + +# BFS를 수행한 결과 출력 +print(bfs(0, 0)) \ No newline at end of file