- 그래프는 버텍스(노드)와 엣지로 구성된 비선형 자료 구조로, 소셜 네트워크, 지도 등 다양한 현실 세계 문제를 모델링하는 데 사용됩니다. 🌍
- 버텍스는 그래프의 기본 구성 단위이며, 엣지는 두 노드 간의 연결을 나타내며 방향성(단방향/양방향)과 가중치(거리, 비용, 시간 등)를 가질 수 있습니다. 📍➡️💰
- 엣지의 방향성은 인스타그램 팔로우(단방향)와 페이스북 친구(양방향) 관계처럼 실제 관계의 특성을 반영합니다. 👥
- 그래프는 인접 리스트 또는 인접 행렬 두 가지 주요 방식으로 구현될 수 있으며, 각 방식은 노드와 엣지의 연결 정보를 표현합니다. 📚
- 인접 리스트는 각 노드가 연결된 노드 목록을 가지는 형태로, 파이썬의 딕셔너리나 자바의 맵으로 구현되어 유연한 구조를 제공합니다. 🔗📜
- 인접 행렬은 2차원 배열을 사용하여
matrix[i][j]가 노드 i에서 j로의 엣지 존재 여부 및 가중치를 나타내며, 노드 수가 고정될 때 유용합니다. 🔢🧮
- 엣지 추가 시 방향성이 없는 그래프는 출발지와 도착지를 뒤바꾼 양방향 엣지를 모두 생성하며, 가중치가 없는 엣지는 일반적으로 1로 표시됩니다. 🔄
- 자바에서는 목적지 노드와 가중치를 담는
Edge 클래스를 사용하지만, 파이썬에서는 튜플을 활용하여 간결하게 표현할 수 있습니다. 🐍☕
- 그래프 클래스는
isDirected 속성을 통해 방향성 여부를 제어하고, addEdge 메소드에서 이 속성에 따라 엣지 추가 로직을 다르게 적용하여 구현됩니다. 🛠️
- 다음 레슨에서는 그래프를 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS) 방식으로 탐색하는 방법을 다룰 예정입니다. 🚀