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