왜 손으로 치나
머리가 그린 알고리즘과 코드의 인덱스가 어긋나는 경우가 많습니다.
예제 하나를 표로 추적하면 논리가 맞는지 5분 안에 드러납니다.
방법
- 예제 입력을 적는다
- 핵심 변수 (
i,lo,hi,freq,dp[i]) 열을 만든다 - 루프마다 한 줄씩 갱신한다
- 최종 출력이 기대와 같은지 본다
| step | lo | hi | sum | 비고 |
|---|---|---|---|---|
| 0 | 0 | 3 | 9 | 시작 |
| 1 | 0 | 2 | 7 | hi-- |
| 2 | 1 | 2 | 5 | 목표 |
연습장과 함께
추적이 맞는데 코드가 틀리면, 같은 변수를 console.log / print로 찍어 표와 비교하세요.
표는 맞고 로그만 다르면 구현 버그입니다.
표부터 틀리면 알고리즘 버그입니다. 고치는 곳이 다릅니다.
// 임시 디버그 (제출 전 제거)
console.log({ lo, hi, sum });
작은 예제를 직접 만들기
공식 예제만 보지 말고:
- 길이 0, 1, 2
- 전부 같은 값
- 이미 정답인 상태
를 만들어 같은 표로 돌리세요. 다음 레슨 경계와 연결됩니다.
재귀·DP일 때
호출 트리나 dp 표를 칸마다 채웁니다.
“점화식은 맞는데 초기값이 틀림”이 추적에서 바로 보입니다.
작은 표 예시 (투포인터)
입력 [1,2,4,7], 목표 합 6
| step | L | R | sum | 행동 |
|---|---|---|---|---|
| 0 | 0 | 3 | 8 | 너무 큼 → R-- |
| 1 | 0 | 2 | 5 | 작음 → L++ |
| 2 | 1 | 2 | 6 | 발견 |
표가 막히면 코드의 인덱스·조건이 틀렸을 가능성이 큽니다.
출력만 맞고 중간이 이상하면 운으로 통과한 케이스일 수 있으니 다른 예제도 한 번 더 추적하세요.
언제 그만두나
한 예제에서 논리가 맞고, 경계 케이스(빈/1개/최대)도 머릿속으로 통과하면 구현으로 넘어갑니다.