이코테 2021, DFS 개념 정리 (파이썬)
2021. 6. 4. 22:58ㆍ알고리즘/DFS
728x90
반응형
DFS
- 깊이 우선 탐색이라고 부르며 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다.
- 스택 자료구조(혹은 재귀 함수)를 이용한다.
DFS의 동작과정
0. 그래프를 준비한다. (해당 강의에서는 번호가 낮은 인접 노드 순으로 방문하는 기준을 세움)
1. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다.
2. 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문 처리함. 방문하지 않은 인접 노드가 없드면 스택에서 최상단 노드를 꺼낸다.
3. 더이상 2번의 과정을 수행할 수 없을 때까지 반복한다.
코드
- 위의 그래프를 다음과 같이 코드로 작성할 수 있다.
graph = [
[],
[2, 3, 8],
[1, 7],
[1, 4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
visited = [False] * len(graph)
def dfs(graph, v, visited):
# 방문 처리
visited[v] = True
print(v, end=' ')
# 현재 노드와 연결된 다른 노드를 재귀적으로 방문하여 스택에 쌓는 듯이 동작하도록 한다.
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
print('dfs로 호출한 결과 :', end='')
dfs(graph, 1, visited)
- 위에서 볼 수 있듯이 인접해있는 노드를 타고 들어가 가장 깊숙히 있는 노드를 우선적으로 스택에 삽입하고 방문 처리하는 알고리즘을 DFS라고 한다.
- 처음 접해보는 개념이기에 매우 어렵고 생소한 개념이었지만 동빈나님의 유튜브 강의에서 매우 잘 설명이 되어있어 이해하는 데 많은 도움이 됐다.
- 관련 문제를 푸는 데 꽤나 오랜 시간이 걸렸다. 하루에 한 두개씩 꾸준히 푸는 연습이 필요할 것 같다.
강의 자료 출처 : 동빈나 이코테 2021 강의 몰아보기 DFS 알고리즘 영상
728x90
반응형
'알고리즘 > DFS' 카테고리의 다른 글
백준 온라인 저널, DFS/4963번 : 섬의 개수(파이썬) (0) | 2021.06.17 |
---|---|
백준 온라인 저널, DFS/1012번 : 유기농 배추(파이썬) (0) | 2021.06.13 |
백준 온라인 저널, DFS/11724번 : 연결 요소의 개수(파이썬) (0) | 2021.06.13 |
백준 온라인 저널, DFS/2606번 : 바이러스(파이썬) (0) | 2021.06.13 |
백준 온라인 저널, DFS/2667번 : 단지번호붙이기(파이썬) (0) | 2021.06.10 |