스파이더맨: No Way Home 개봉이 얼마 남지 않았다. 스파이더맨의 거미줄과 옷을 보면 거미줄의 모양이 vertice와 edge로 이루어진 Graph와 비슷해 Graph Algorithm이 생각난다.
때문에 그래프 알고리즘에 대해 알아볼 것이다.
그래프(Graph)
그래프라 하면 일반적으로 '정점(노드)'과 '간선(엣지)'으로 이루어진 자료구조를 의미한다.
또한 간선의 방향 유무에 따라서 단방향 그래프와 무방향 그래프(또는 양방향)로 나뉜다.
그래프의 탐색 기법에는 BFS, DFS, 다익스트라, 크루스칼 등등 많은 탐색 기법들이 있다.
그 중 BFS와 DFS가가장 대표적이고 알고리즘 문제로 많이 나오는 자료구조다.
BFS(Breadth-First Search) 즉 너비 우선 탐색이라고 불린다.
Baekjoon 2178: 미로 탐색
Solution
import sys
N, M = map(int, sys.stdin.readline().split())
# matrix 배열
matrix = [sys.stdin.readline().rstrip() for _ in range(N)]
# 방문경로 배열
visited = [[0]*M for _ in range(N)]
# 좌/우/위/아래 방향 이동
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
# BFS 경로 탐색
# queue 방식 사용
queue = [(0,0)]
visited[0][0] = 1
while queue:
x, y = queue.pop(0)
if x == N-1 and y == M-1:
# 최종 경로 도착
print(visited[x][y])
break
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < M:
if visited[nx][ny] == 0 and matrix[nx][ny] == '1':
visited[nx][ny] = visited[x][y] + 1
queue.append((nx,ny))
DFS는 다음 게시물에서 설명하겠다.
억텐..