"퀘스트 전체가 향해온 비밀: 너는 모든 알고리즘을 알아서 문제를 푸는 게 아니야. 문제가 어떤 모양인지 알아보고, 그 모양에 맞는 도구에 손대서 풀어. 모양은 적고; 알고리즘은 많아."
진짜 능력은 인식이다
알고리즘이 수천 개고 다 외울 수 없어 — 시도하지도 마. 알고리즘을 아는 사람이랑 쓸 수 있는 사람을 가르는 건 다른 능력이야: 문제를 읽고, 그 밑바탕 모양을 식별하고, 그 모양을 패러다임에 맞추기. 모양을 이름 붙이면 ('이건 최단 경로 문제', '이건 겹치는-선택-에-걸쳐-최적화'), 맞는 도구랑 대략 복잡도까지 따라오고 — 구현 디테일은 찾아볼 수 있어. 인식이 지속되는 능력이고; 암기는 아니야.
모양 → 도구 치트시트
이 매핑을 체화하면 대부분 문제가 해법을 알려줘:
- '키로 조회 / 존재해' → 해시맵 / 셋 (O(1)).
- '순서, 범위, min/max, 정렬 필요' → BST / 정렬 배열 + 이진 탐색; 극값만 반복 필요하면 힙.
- '최단 경로' → BFS (비가중), Dijkstra (가중, 음 아님), Bellman-Ford (음의 엣지).
- '모든 걸 가장 싸게 연결' → 최소 신장 트리 (그리디).
- '방법 수 세기 / 겹치는 선택에 걸쳐 최소-최대' → 동적 계획법.
- '제약 아래 모든 조합 시도' → 백트래킹.
- '접두사 / 자동완성' → 트라이.
- '되는 가장 작은 X / 단조 경계' → 답에 이진 탐색.
- '속성 가진 최선 연속 구간' → 슬라이딩 윈도우.
- '정렬 데이터의 쌍 / 두 수열' → 투 포인터.
너는 알고리즘을 외우는 게 아니라; 문제 모양을 알아보고 패러다임에 매핑해. 키로 조회 → 해시; 순서/범위 → 트리; 최단 경로 → BFS/Dijkstra; 모두-연결 → MST; 세기/겹침-최적화 → DP; 모든-조합 → 백트래킹; 접두사 → 트라이; 단조 → 이진 탐색. 모양을 이름 붙이면, 도구가 따라와.
그 과정
문제가 앞에 떨어지면, 코드로 점프하길 참아. 루프를 돌려: (1) 진짜 뭘 묻나? — 이야기를 벗기고 핵심 연산을 찾아. (2) 모양이 뭐야? — 치트시트랑 맞춰. (3) 맞는 도구가 뭐고, 대략 뭘 치를까? — 그게 입력 크기에 받아들일 만해? (4) 그제야 구현, 필요한 대로 구체를 찾으며. 이 '모양-먼저' 습관이 일하는 엔지니어가 낯선 문제를 차분히 다루게 해 — 외운 해법을 떠올리는 게 아니라, 새 옷 입은 익숙한 모양을 알아보는 거야.
피파의 고백
한참 동안 알고리즘 잘하는 게 수백 개를 외운 거라 생각했어. 아빠가 전제 전체를 부드럽게 교정했어: "아무도 다 안 외워. 프로는 모양을 알아보고 나머지를 찾아봐." 내가 진짜 필요한 건 더 큰 메모리가 아니라 — '오, 이건 그냥 변장한 최단 경로 / DP / 슬라이딩 윈도우네' 의 더 날카로운 눈이었어. 이 퀘스트 전체가 몰래 그 눈을 훈련해왔어. 알고리즘은 어휘고; 모양을 알아보는 게 유창함이야.