한양과학기술고등학교

에듀테크 프로젝트 대시보드

그래프 색칠 (Graph Coloring)

그래프 색칠 (Graph Coloring)

규칙은 딱 하나 — 선으로 이어진 두 점은 서로 다른 색이어야 한다. 이 단순한 퍼즐이 지도 색칠, 시험 시간표 짜기, 컴파일러의 레지스터 배정, 스도쿠, 무선 주파수 할당까지 전부 같은 문제다. 최소 몇 가지 색이면 될까? 이것을 색칠수(chromatic number) χ(G) 라고 부른다.

충돌 제약(constraint) — 정점 = 무언가(수업·변수·나라·라디오 방송국), 간선 = "동시에 있으면 안 되는 관계". 색 = 자원(시험 시간대·CPU 레지스터·주파수). 이웃끼리 색이 겹치지 않게 칠하면 = 자원 충돌 없이 배정 완료.

1. 직접 칠해 보기

정점을 클릭하면 색이 바뀐다(색 없음 → 1번 색 → 2번 색 → … → 다시 색 없음). 이어진 두 정점이 같은 색이면 그 간선이 빨갛게 경고한다. 목표: 충돌 0 을 유지하면서 모든 정점을 칠하되, 되도록 적은 색으로.

그래프
쓴 색 개수
0
충돌 간선
0
정점 / 간선
0 / 0
색칠수 χ(G)
?
색 팔레트 (k개까지 활성)
정점을 클릭해 색칠하거나 「탐욕적 색칠」을 눌러 보세요.

※ 탐욕적 색칠(greedy): 정점을 정해진 순서로 훑으면서, 그 정점의 이웃이 아직 쓰지 않은 가장 작은 번호의 색을 준다. 빠르지만(O(V+E)) 항상 최소는 아니다 — 순서에 따라 결과가 달라진다.

2. 색이 몇 개나 필요할까?

그래프 모양χ (색칠수)이유
간선이 하나도 없음1아무 제약 없음
이분 그래프 (짝수 사이클 포함)2두 그룹으로 나뉘고 그룹 안엔 간선이 없음 ↔ 홀수 사이클이 없다
홀수 길이 사이클 (C₃, C₅, …)32색으로 번갈아 칠하면 시작·끝이 만나 충돌
완전그래프 Kₙ (모두와 연결)n모든 쌍이 이웃이라 전부 다른 색
평면 그래프 (지도)≤ 44색 정리 — 어떤 지도든 4색이면 충분 (1976년 컴퓨터로 증명)
항상 χ(G) ≥ ω(G) (가장 큰 완전 부분그래프, 즉 서로 다 이어진 정점 무리의 크기). 그리고 탐욕적 색칠은 χ(G) ≤ Δ(G) + 1 을 보장한다(Δ = 최대 차수). 정확한 χ를 구하는 건 NP-난해 — 큰 그래프에선 근사·휴리스틱을 쓴다. → 백트래킹으로 정확히 풀 수도 있지만 느리다.

3. 순서가 결과를 바꾼다 — Welsh–Powell

탐욕법은 정점을 훑는 순서에 민감하다. 나쁜 순서는 이분 그래프에도 여러 색을 쓰게 만든다(왕관 그래프가 대표적). Welsh–Powell 휴리스틱은 차수가 큰 정점부터 칠한다 — 까다로운 정점을 먼저 처리해서 색 수를 줄이는 경향이 있다. 위 데모의 「탐욕적 색칠」도 차수 내림차순을 쓴다.

# 탐욕적 그래프 색칠 (Welsh–Powell 순서)
def greedy_coloring(adj):            # adj: {정점: set(이웃)}
    order = sorted(adj, key=lambda v: -len(adj[v]))   # 차수 큰 순
    color = {}
    for v in order:
        used = {color[u] for u in adj[v] if u in color}
        c = 0
        while c in used:        # 이웃이 안 쓴 가장 작은 색
            c += 1
        color[v] = c
    return color            # max(color.values())+1 = 쓴 색 개수

4. 같은 문제, 다른 옷

상황정점간선(충돌)색
시험 시간표과목같은 학생이 듣는 두 과목시험 시간대
레지스터 배정변수(의 생존 구간)동시에 살아 있는 두 변수CPU 레지스터
지도 색칠나라·주국경을 맞댄 두 지역칠하는 색
무선 주파수 할당기지국전파가 겹치는 두 기지국채널 주파수
스도쿠81칸같은 행·열·박스의 두 칸숫자 1–9 (χ = 9)
회의실 배정회의시간이 겹치는 두 회의회의실
한 줄 요약 — "이웃끼리 다른 색"은 곧 "충돌하는 것끼리 다른 자원". 그래프 색칠을 풀 줄 알면 시간표·컴파일러·통신망의 자원 배정 문제를 한꺼번에 푸는 셈이다. → 그래프 탐색, 위상 정렬도 함께 보자.