이번 주에는 알고리즘 전반을 한 사이클로 정리했다
힙 정렬을 직접 구현하면서 heapify 개념(상향식 / 하향식)
부모–자식 인덱스 계산
DFS / BFS
인접리스트 구성 → 정렬 → 탐색 흐름
DFS
방문 순서
재귀 호출 구조
백트래킹으로 모든 경우의 수 탐색
BFS
방문 처리를 큐에 넣는 시점에 해야 하는 이유
최단거리 문제의 전형적인 패턴
완전탐색 / 그래프 응용
2차원 배열 탐색 (상하좌우)
숫자판 점프, 게임 맵 최단거리 등 좌표 기반 문제
Greedy
당장의 최적 선택이 전체 최적해를 보장하는 조건
체육복, 수리공 항승 문제
DP
계단, 동전, LIS, 배낭 문제까지
점화식 세우기
“뒤에서부터 순회해야 같은 물건을 중복 사용하지 않는다” 같은 디테일 이해
투포인터 / 이분탐색
투포인터는 정렬 여부에 따라 접근이 완전히 달라진다는 점
이분탐색에서 무엇을 탐색 대상으로 잡는지
조건 만족 시 start/end를 어떻게 움직이는지
DP와 greedy 문제는 어떻게 접근해야하는지 감이 안잡힐때가 많았음. -> 이거 땜에 코딩하기 싫었,,
코드 양이 많아지면서 스스로 쓴 코드인데도 다시 보면 헷갈리는 부분이 생김
DFS/BFS, 이분탐색에서 분기 조건은 아는데
왜 이 시점에 이 값을 바꾸는지가 순간적으로 흔들림
“문제는 풀었는데 설명하라 하면 막히는 상태”가 종종 있었음
주석을 많이 쓰고, 비유(서랍장 등)를 붙이니까
→ 다시 볼 때 이해 속도는 올라감
BFS/DFS 같은 알고리즘은
👉 문제 유형이 바뀌어도 뼈대는 같다는 자신감이 조금 생김
아직 완벽하진 않지만
👉 “이 문제는 이 알고리즘 냄새가 난다” 정도는 느낄 수 있음
대표 문제 반복
DFS/BFS/이분탐색/DP에서
“아무 생각 없이 써도 나오는 코드” 구현
코드 설명 연습
코드 한 줄씩 “왜 이게 필요한지” 말로 설명해보기
틀린 문제, 헷갈린 문제를 끝까지 분석