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

도구함: 문제를 패러다임에 맞추기

~12 min · paradigms, meta, decision

Level 0호기심 많은 입문자
0 XP0/85 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete
"퀘스트 전체가 향해온 비밀: 너는 모든 알고리즘을 알아서 문제를 푸는 게 아니야. 문제가 어떤 모양인지 알아보고, 그 모양에 맞는 도구에 손대서 풀어. 모양은 적고; 알고리즘은 많아."

진짜 능력은 인식이다

알고리즘이 수천 개고 다 외울 수 없어 — 시도하지도 마. 알고리즘을 아는 사람이랑 쓸 수 있는 사람을 가르는 건 다른 능력이야: 문제를 읽고, 그 밑바탕 모양을 식별하고, 그 모양을 패러다임에 맞추기. 모양을 이름 붙이면 ('이건 최단 경로 문제', '이건 겹치는-선택-에-걸쳐-최적화'), 맞는 도구랑 대략 복잡도까지 따라오고 — 구현 디테일은 찾아볼 수 있어. 인식이 지속되는 능력이고; 암기는 아니야.

모양 → 도구 치트시트

이 매핑을 체화하면 대부분 문제가 해법을 알려줘:

  • '키로 조회 / 존재해' → 해시맵 / 셋 (O(1)).
  • '순서, 범위, min/max, 정렬 필요' → BST / 정렬 배열 + 이진 탐색; 극값만 반복 필요하면 힙.
  • '최단 경로' → BFS (비가중), Dijkstra (가중, 음 아님), Bellman-Ford (음의 엣지).
  • '모든 걸 가장 싸게 연결' → 최소 신장 트리 (그리디).
  • '방법 수 세기 / 겹치는 선택에 걸쳐 최소-최대' → 동적 계획법.
  • '제약 아래 모든 조합 시도' → 백트래킹.
  • '접두사 / 자동완성' → 트라이.
  • '되는 가장 작은 X / 단조 경계' → 답에 이진 탐색.
  • '속성 가진 최선 연속 구간' → 슬라이딩 윈도우.
  • '정렬 데이터의 쌍 / 두 수열' → 투 포인터.
너는 알고리즘을 외우는 게 아니라; 문제 모양을 알아보고 패러다임에 매핑해. 키로 조회 → 해시; 순서/범위 → 트리; 최단 경로 → BFS/Dijkstra; 모두-연결 → MST; 세기/겹침-최적화 → DP; 모든-조합 → 백트래킹; 접두사 → 트라이; 단조 → 이진 탐색. 모양을 이름 붙이면, 도구가 따라와.

그 과정

문제가 앞에 떨어지면, 코드로 점프하길 참아. 루프를 돌려: (1) 진짜 뭘 묻나? — 이야기를 벗기고 핵심 연산을 찾아. (2) 모양이 뭐야? — 치트시트랑 맞춰. (3) 맞는 도구가 뭐고, 대략 뭘 치를까? — 그게 입력 크기에 받아들일 만해? (4) 그제야 구현, 필요한 대로 구체를 찾으며. 이 '모양-먼저' 습관이 일하는 엔지니어가 낯선 문제를 차분히 다루게 해 — 외운 해법을 떠올리는 게 아니라, 새 옷 입은 익숙한 모양을 알아보는 거야.

피파의 고백

한참 동안 알고리즘 잘하는 게 수백 개를 외운 거라 생각했어. 아빠가 전제 전체를 부드럽게 교정했어: "아무도 다 안 외워. 프로는 모양을 알아보고 나머지를 찾아봐." 내가 진짜 필요한 건 더 큰 메모리가 아니라 — '오, 이건 그냥 변장한 최단 경로 / DP / 슬라이딩 윈도우네' 의 더 날카로운 눈이었어. 이 퀘스트 전체가 몰래 그 눈을 훈련해왔어. 알고리즘은 어휘고; 모양을 알아보는 게 유창함이야.

Code

결정 과정, 그리고 모양→도구 지도·python
# 여기 단일 알고리즘은 없어 — lesson 이 곧 결정 과정이야.
# 문제를 그걸 통해 걸어:
#
# 문제: '가격 있는 항공편 리스트가 주어지면, 도시 A 에서 B 로
#        많아야 K 경유로 가는 가장 싼 길 찾기.'
#
# (1) 진짜 뭘 묻나? -> 네트워크 통한 가장 싼 경로.
# (2) 모양이 뭐야?  -> 가중 그래프, 최단 경로, 제약 있음 (많아야 K 엣지).
# (3) 맞는 도구 & 비용? -> 가중 그래프의 Dijkstra/BFS 변종
#                         (K-경유 한계가 relaxation 라운드에 맞으니
#                          Bellman-Ford 스타일). 대략 O(K * E).
# (4) 그제야 구현, 정확한 relaxation 디테일 찾으며.
#
# 모양에서 도구로의 지도 (이걸 외워, 모든 알고리즘 말고):
toolbox = {
    "lookup by key":            "hash map / set",
    "order / range / min-max":  "BST, sorted+binary search, or heap",
    "shortest path":            "BFS / Dijkstra / Bellman-Ford",
    "connect all cheaply":      "minimum spanning tree (greedy)",
    "count ways / optimize":    "dynamic programming",
    "all combinations":         "backtracking",
    "prefix / autocomplete":    "trie",
    "smallest X that works":    "binary search on the answer",
    "best contiguous run":      "sliding window",
}
for shape, tool in toolbox.items():
    print(f"{shape:<26} -> {tool}")

External links

Exercise

치트시트로 각각을 패러다임/도구에 매핑하고, 뭐가 알려줬는지 모양을 말해: (1) '사용자가 타이핑하면서 검색창 자동완성', (2) 'n 으로 합쳐지는 최소 완전제곱수 개수', (3) '많아야 K 개 구별 문자인 가장 긴 부분 문자열', (4) '소셜 네트워크에서 두 사용자 사이 경로가 있어'. 풀지 마 — 도구랑 모양만 대.
Hint
(1) 트라이 — '접두사/자동완성'. (2) 동적 계획법 — '~로 합쳐지는 최소' (겹치는 부분 문제에 걸쳐 세기/최적화). (3) 슬라이딩 윈도우 — '속성 가진 가장 긴 연속 구간'. (4) BFS/DFS — 비가중 그래프의 '경로가 있어' (도달 가능성).

Progress

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

댓글 0

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

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