오늘의 키워드: 파인만 기법 × 인지부하 이론
📝 오늘의 회고
오늘도 공부가 잘 안 됐다. 문제를 풀어도 머릿속에 남지 않고, 한 문제 풀고 나면 다음 문제는 전혀 처음 보는 문제처럼 느껴졌다. 답답함이 쌓였다.
그러다 오후쯤, ‘내가 지금 공부를 잘못된 방식으로 하고 있는 건 아닐까?’라는 생각이 들었다. 그래서 방향을 바꿔보기로 했다.
1주차 때 효과를 본 방식이 하나 있다. 화이트보드에 직접 적으며 내가 아는 걸 설명하고, 막히면 AI에게 묻고, 다시 내 말로 풀어내는 방식이다. 이걸 더 개선할 방법이 없을까 찾아보다가, 우연히 두 가지 개념을 알게 됐다.
- 하나는 리처드 파인만의 파인만 기법. "누군가에게 설명할 수 있어야 진짜 이해"라는 말이 유명하다. 단순 암기가 아니라, 가르치듯 풀어낼 때 지식이 내 것이 된다는 원리다.
- 또 하나는 인지 부하 이론. 토스 프론트엔드 개발자 모집 공고를 보다가, 이전 기수 후기에서 "인지 부하 강의가 도움됐다"는 말을 보고 관심이 생겼다. 찾아보니 학습의 효율은 결국 작업 기억의 한계를 어떻게 관리하느냐에 달려 있다는 거였다.
오늘은 이 두 가지를 묶어서 내 공부 방식에 적용해 봤다.
최소 신장 트리를 공부할 때, **‘최소, 스패닝, 트리’**라는 단어 하나하나를 뜯어가며 설명했고, "마을 연결" 문제를 예시로 들어 Kruskal, Prim 알고리즘을 내 언어로 정리했다. 설명이 막히는 순간이 곧 내가 모르는 부분이라는 걸 바로 알 수 있었고, 그때마다 다시 찾아보고 다듬으면서 점점 설명이 매끄러워졌다.
불과 두 시간 반 정도였는데, 이번 주 전체 공부량의 30%는 이 과정에서 얻은 것 같다. 공부가 안 되는 게 아니라, 내 머릿속을 정리하는 방식이 잘못됐던 것이었다. 인지 부하 이론의 말처럼,
- 기본 개념을 먼저 정리해 내재적 부하를 줄였고,
- 불필요한 자료 대신 핵심 예시를 선택해 외재적 부하를 줄였고,
- 설명 활동을 통해 본유적 부하를 극대화할 수 있었다.
다음 주는 아예 일주일 내내 파인만 기법 중심으로 공부해 볼 계획이다. 문제 푸는 개수에 연연하지 않고, 내 언어로 지식을 재구성하는 습관을 들이는 데 집중하려 한다.
📚 오늘 배운 개념 정리
1. 최소 신장 트리 (Minimum Spanning Tree, MST)
정의
- 그래프의 모든 정점을 최소 비용으로 연결하는 트리
- 사이클이 없어야 함 (중복 연결 금지)
- 간선 가중치가 주어진 연결망에서, 전체 비용을 최소화하는 선택 문제
성질
- 정점이 V개라면, MST의 간선 개수는 항상 V-1개
- MST는 유일하지 않을 수도 있음 (같은 비용의 다른 트리 존재 가능)
- 사이클을 이루는 가장 큰 가중치 간선은 항상 MST에서 제외 가능
알고리즘
Kruskal 알고리즘
- 모든 간선을 가중치 기준으로 정렬
- 가장 작은 간선부터 하나씩 선택
- 선택한 간선이 사이클을 만들면 제외
- V-1개의 간선이 선택되면 종료
- 유니온 파인드(Disjoint Set Union) 자료구조로 사이클 여부를 빠르게 판별
Prim 알고리즘
- 임의의 정점에서 시작
- 현재 선택된 정점 집합에서, 밖으로 나가는 가장 저렴한 간선을 선택
- 새로운 정점을 포함시키고 반복
- **우선순위 큐(힙)**을 사용하면 효율적으로 구현 가능
2. 깊이 우선 탐색 (Depth-First Search, DFS)
정의
- 한 경로를 끝까지 따라가며 탐색하는 방식
- 막히면 직전에 갈림길로 돌아와 다른 길을 탐색
특징
- 스택(Stack) 또는 재귀 호출로 구현
- 그래프의 모든 경로를 완전 탐색 가능
- 최단 경로는 보장하지 않음
- 백트래킹 문제(예: 스도쿠, N-Queen)에 활용
절차
- 시작 정점을 방문 처리
- 인접한 정점 중 방문하지 않은 정점으로 이동
- 이동할 곳이 없으면 되돌아감
- 모든 정점을 방문할 때까지 반복
3. 너비 우선 탐색 (Breadth-First Search, BFS)
정의
- 가까운 정점부터 차례대로 탐색하는 방식
- 시작점에서 가까운 거리 순으로 퍼져나감
특징
- 큐(Queue) 기반
- 모든 간선 가중치가 동일할 때 최단 경로 보장
- 네트워크 탐색, 최단 거리 문제, 그래프 레벨별 순회에 활용
절차
- 시작 정점을 큐에 넣고 방문 처리
- 큐에서 정점을 꺼냄
- 인접 정점 중 방문하지 않은 정점을 큐에 넣음
- 큐가 빌 때까지 반복