2주차에는 드디어 코딩 테스트의 꽃, 그래프 탐색(bfs/dfs)를 공부할 예정입니다.

그래프 탐색은 한국 코딩 테스트에서는 90% 이상의 확률로 출제된다고 봐도 무방할 만큼 중요하고 자주 출제되는 유형입니다.

01. 트리 & 그래프


우선 그래프 탐색을 위해서는 그래프에 대해 알아야합니다. 트리와 그래프는 가장 대표적인 그래프형 자료구조입니다.

Tree는 서로 연결된 Node의 계층형 자료구조로써, root 와 부모-자식 관계의 subtree로 구성되어 있습니다.

스크린샷 2024-03-25 오전 2.34.41.png

**그래프(G)**는 정점(vertex)들의 집합 V와 이들을 연결하는 간선(edge)들의 집합 E로 구성된 자료구조입니다.

Untitled

크게 보면 트리는 그래프의 특수한 형태입니다.

스크린샷 2024-03-25 오전 2.27.09.png

출처 : https://bigsong.tistory.com/33

트리 그래프
정의 단일 루트 노드로 연결된 노드들로 이루어진 계층적인 데이터 구조. 각각의 노드들이 엣지로 연결된 비계층적인 데이터 구조.
노드 각 노드(루트 제외)는 정확히 하나의 부모를 가지며 사이클이 없다. 노드들은 여러 엣지로 연결될 수 있으며 사이클이 존재할 수 있다.
루트 노드 트리 구조에서 최상위 노드. 그래프에는 루트 노드의 개념이 없다.
방향성 vs 무방향성 트리는 일반적으로 무방향이다. 그래프는 방향이 있는지, 없는지에 따라 방향성이나 무방향성이 될 수 있다.
가중치 vs 무가중치 트리는 일반적으로 무가중치이다. 그래프는 가중치가 있을 수 있으며(엣지가 연결된 가중치를 가짐), 없을 수도 있다.
비순환성 vs 순환성 트리는 항상 비순환적이다(사이클이 없음). 그래프는 비순환적일 수도 있고(사이클 없음), 순환적일 수도 있다(사이클 포함).
연결성 모든 노드 쌍 사이에는 정확히 하나의 경로가 있다. 그래프는 연결될 수도 있고(모든 노드가 어떤 노드에서 시작해서 다른 모든 노드에 도달 가능), 분리될 수도 있다.
구성요소 트리는 연결된 구성요소를 가지지 않는다. 연결된 구성요소는 모든 노드 쌍이 적어도 하나의 경로로 연결되어 있는 하위 그래프이다.

기본 개념은 천천히 공부해보시고 여기서는 실제 문제에서 활용하는 방법을 중점적으로 다루겠습니다.