C.W.K.
Stream
Lesson 01 of 06 · published

모든 게 그래프야

~12 min · graphs, worldview, lens

Level 0호기심 많은 입문자
0 XP0/85 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete
"Foundations 에서 구조-와-비용이 세상을 보는 렌즈라 했어. 여기 그 렌즈의 가장 날카로운 버전: 뭐든 '것들, 그리고 그들이 어떻게 관계 맺나' 로 묘사하는 순간, 그래프를 그린 거야."

날카로워진 렌즈

그래프는 그냥 엣지 (관계) 로 연결된 정점 (것들) 이야. 그게 정의 전부고 — 거의 모욕적일 만큼 일반적인데, 그게 정확히 그 힘이야. 중요한 거의 모든 시스템이 보면 그래프야:

  • 지도: 교차로가 정점, 도로가 엣지. 네 GPS 가 지금 그래프 알고리즘을 돌리는 중.
  • 소셜 네트워크: 사람이 정점, 친구 관계가 엣지. '알 수도 있는 사람' 이 그래프 쿼리.
  • : 페이지가 정점, 하이퍼링크가 엣지. Google 의 원조 PageRank 가 그 그래프를 순위 매겼어.
  • 의존성: 패키지, 빌드 단계, 강의 선수과목 — 다른 것보다 먼저 와야 하는 정점들. 모든 패키지 매니저가 그래프를 해결해.
  • 뇌, 분자, 공급망, 인용, 인터넷 자체 — 다 그래프.

첫 트랙의 그 세계관 프레임이, 온 힘으로 돌아온 거야: 관계는 현실의 근본 특성이고, 그래프가 그 자료구조야.

네가 배운 모든 게 특수한 그래프야

통합은 이거: 앞 트랙들의 구조가 다 규칙 더한 그래프일 뿐이야. 트리는 순환 없고 루트 하나인 연결 그래프. 연결 리스트는 각 노드가 정확히 자식 하나인 트리 — 선으로 늘린 그래프. 그중 아무거나 잡고 제약을 없애면, 일반 그래프가 남아. 그래서 그래프를 배우는 건 새 섬을 배우는 게 아니라; 앞 구조들이 반도였던 본토에 닿는 거야.

엣지의 어휘

모든 그래프 문제를 빚는 두 구분: 방향 vs 무방향 (엣지가 양방향이야? 친구는 상호 — 무방향; 소셜의 '팔로우' 는 일방 — 방향), 그리고 가중 vs 비가중 (엣지가 비용을 실어? 도로는 거리 있음 — 가중; 평범한 친구 링크 — 비가중). 네 문제에 이 두 속성을 이름 붙이면 어떤 알고리즘이 필요한지 알려줘: 비가중 최단 경로 → BFS; 가중 → Dijkstra (다음 트랙).

그래프는 정점 (것들) + 엣지 (관계) — 존재하는 가장 일반적인 구조; 트리랑 리스트는 규칙 없앤 그래프야. 문제를 '것들이랑 어떻게 연결되나' 로 표현할 수 있으면, 그래프 문제야. 그게 온 힘의 세계관 렌즈야.

피파의 고백

아빠는 'X 를 어떻게 모델링해?' 에 '것들이 뭐고, 어떻게 관계 맺어?' 로 답하는 습관이 있어. 한참 동안 말버릇이라 생각했어. 그러다 그게 모호한 문제 — 추천, 스케줄링, 라우팅, 의존성 해결 — 를 같은 문제로 바꾸는 걸 알아챘어: 그래프, 더하기 순회. Foundations 의 렌즈가 슬로건이길 멈추고 내 실제 첫 수가 됐어: 정점 이름 붙이고, 엣지 이름 붙이면, 갑자기 막힌 게 아니라 그냥 BFS 냐 DFS 냐 고르는 거야.

Code

그래프 둘: 무방향 친구, 방향 의존성·python
# 인접 리스트로 그래프: 각 정점이 이웃에 매핑. (dict!)

# 무방향: 친구는 양방향.
friends = {
    "pippa": ["dad", "mom"],
    "dad":   ["pippa", "mom"],
    "mom":   ["pippa", "dad"],
}

# 방향: '의존' 은 일방 (빌드 순서, 선수과목).
depends_on = {
    "app":      ["backend", "frontend"],
    "backend":  ["database"],
    "frontend": ["backend"],
    "database": [],
}

def neighbors(graph, node):
    return graph.get(node, [])

print("pippa's friends:", neighbors(friends, "pippa"))    # ['dad', 'mom']
print("app depends on :", neighbors(depends_on, "app"))   # ['backend', 'frontend']

# 트리는 순환 없고 루트 하나인 그래프; 연결 리스트는 각 노드가
# 정확히 이웃 하나인 그래프. 같은 원시 요소, 규칙 더 적게.

External links

Exercise

네 삶의 시스템 하나를 골라 — 단톡방, 교통 노선도, 레시피 단계, 음악 추천 — 그래프로 모델링해. 정점이 뭐야? 엣지가 뭐야? 엣지가 방향이야 무방향이야, 가중이야 비가중이야? 그다음 그 시스템에 대해 그래프 순회가 될 질문 하나를 대봐.
Hint
예 — 레시피 단계: 정점 = 단계, 엣지 = '먼저 일어나야 함', 방향 (섞기 전에 굽기 불가), 비가중. 자연스러운 순회 질문: '모든 단계를 할 유효한 순서가 뭐야?' (그게 위상 정렬, 곧 나와).

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.