정상급 문제는 "알고리즘 고르기"가 아니다
골드~플래티넘까지는 "이건 다익스트라, 저건 DP"처럼 분류 가 통한다. 하지만 루비/마스터급 문제는 알려진 알고리즘이 그대로 들어맞지 않는다. 핵심은 관찰(observation) 로 문제를 다른 문제 로 바꾸는 것. 이 강의는 그 사고 루틴을 정리한다.
1. 작은 케이스를 손으로 풀어라
\(n = 1, 2, 3\)을 직접 계산하고 수열을 OEIS에 넣어 보라. 답의 패턴 이 보이면 절반은 풀린 것이다. 패턴 → 추측(conjecture) → 증명 또는 반례.
예: "격자에서 단조 경로 수"를 손으로 세면 \(\binom{n+m}{n}\)이 보인다. 그러면 DP가 아니라 조합 공식이 답.
2. 불변량(invariant)을 찾아라
연산이 반복될 때 변하지 않는 양 이 있는가? 불변량은 "도달 가능성"과 "불가능성 증명" 모두에 강력하다.
예: 15-퍼즐의 가환성 판정 = 순열의 패리티 불변량. 어떤 배치는 절대 도달 불가능함을 패리티로 증명.
전형 불변량: 패리티, 합 \(\bmod k\), 색칠(체스판), XOR 값(님버), 위상량(감김 수).
3. 단조성과 이분 탐색
"답이 \(X\)로 가능하면 \(X+1\)도 가능"한 단조성이 보이면, 답을 이분 탐색 하고 판정 문제로 바꾼다(parametric search). 최적화 → 판정 변환은 만능에 가깝다.
$$ \text{최대화 } \min(\cdot) \;\Rightarrow\; \text{"모든 값이 } X \text{ 이상 가능한가?" 이분.} $$
4. 쌍대성(duality)으로 뒤집어라
문제를 반대편 에서 보라.
- 최대 흐름 ↔ 최소 컷.
- 최대 매칭 ↔ 최소 정점 커버(König, 이분).
- LP 최대화 ↔ 쌍대 최소화.
- "선택" ↔ "제거"(여집합으로 세기).
직접 풀기 어려운 양을 쌍대량으로 바꾸면 구조가 단순해질 때가 많다.
5. 환원(reduction)
이 문제가 내가 아는 문제로 바뀌는가?
- 구간/순서 문제 → 그래프(위상정렬, 컴포넌트).
- 제약 만족 → 2-SAT, 차분 제약(Bellman-Ford).
- "동시에 두 제약" → 매트로이드 교집합/플로우.
- 카운팅 → 생성 함수, 포함배제.
예: "변수 쌍 (a∨b) 절들" → 함의 그래프의 SCC = 2-SAT.
6. 대칭과 정규화
답이 대칭이면 대표 하나만 세고 곱한다(번사이드/폴리아). 입력을 정렬·회전·반사로 정규형 으로 바꾸면 경우의 수가 폭발적으로 줄어든다.
사고 체크리스트
| 막혔을 때 자문 | 도구 |
|---|---|
| 작은 케이스 패턴? | 손계산, OEIS |
| 변하지 않는 양? | 불변량, 패리티 |
| 답이 단조? | 이분 + 판정 |
| 반대로 보면? | 쌍대, 여집합 |
| 아는 문제로? | 그래프/플로우/SAT 환원 |
| 대칭? | 번사이드, 정규화 |
다음 강의에서 이 루틴을 구체적 미니 문제들에 적용한다.