14강 / 20강

그래프 — 점과 선으로 그린 관계

친구 관계, 지하철 노선도, 인터넷 그 자체

그래프 — 점과 선으로 그린 관계
그래프는 점(정점)과 선(간선)입니다. 트리는 그래프의 특별한 한 종류예요.

트리에는 규칙이 있었습니다 — 부모는 하나, 순환은 없음. 이 규칙을 전부 없애면 어떻게 될까요? 아무 점이나 아무 점과 이어질 수 있는 구조, 그게 그래프(graph)입니다.

  • SNS 친구 관계 — 나와 친구, 친구의 친구
  • 지하철 노선도 — 역과 역 사이의 연결
  • 내비게이션 — 교차로와 도로
  • 인터넷 — 웹페이지와 링크
용어뜻
정점 (vertex, node)점 하나 — 사람, 역, 도시
간선 (edge)점을 잇는 선 — 친구 관계, 노선
방향 그래프화살표가 있음 — 인스타 팔로우(내가 팔로우해도 상대는 아닐 수 있음)
무방향 그래프화살표 없음 — 페이스북 친구(양쪽 다 친구)
가중치선에 붙은 숫자 — 거리, 시간, 요금

그래프를 코드로 담는 두 가지 방법

📇 인접 리스트
딕셔너리 + 리스트
각 점이 이웃 목록을 들고 있음
선이 적을 때 메모리 절약 ✅
대부분의 실제 그래프가 이 경우
🔢 인접 행렬
2차원 리스트
[ㄱ][ㄴ] 이 1이면 연결됨
"둘이 이어졌나?"를 즉시 확인 ✅
점이 많으면 메모리 폭발 ❌
그래프는 특별한 문법이 아니라 딕셔너리 + 리스트입니다.
Python 브라우저에서 실행

🎮 그래프 실험실

점을 클릭해 선을 이어 보세요. 인접 리스트와 인접 행렬이 동시에 갱신되는 걸 볼 수 있습니다. 점이 늘어날 때 행렬 칸이 얼마나 빠르게 불어나는지도 확인해 보세요.

그래프 — 점과 선을 잇고 두 가지 표현을 동시에 봅니다
불러오는 중…
같은 그래프, 두 가지 모습. 행렬은 점 개수의 제곱만큼 자랍니다.
Python 브라우저에서 실행
지하철 노선도를 그래프로. 마지막 부분이 15강 BFS입니다.
Python 브라우저에서 실행
🤔 확인 문제
트리와 그래프의 관계로 옳은 것은?
🤔 확인 문제
정점이 1000개인데 간선은 2000개뿐인 그래프. 알맞은 표현은?
🤔 확인 문제
인스타그램 팔로우 관계를 그래프로 표현한다면?