왜 쓰나
바로 타이핑하면 인덱스와 분기가 섞인 채 디버그하게 됩니다.
5~10줄 의사코드가 있으면 “무엇을 하려는지”와 “버그”를 분리할 수 있습니다.
템플릿
입력 파싱 → tokens / n / arr
전처리(정렬·빈도·가드)
핵심 루프:
불변조건: …
갱신: …
출력 포맷
언어 키워드(for, def)보다 상태 이름을 먼저 정하세요: lo, hi, best, freq.
불변조건
루프가 돌 때마다 참이어야 하는 문장입니다.
예: “[0..i)는 이미 처리했고 best는 그 구간의 최대 합”
불변조건을 말할 수 없으면 아직 알고리즘이 없습니다.
이 사이트에서
- 문제 읽기 체크리스트 후
- 예제 1개를 표로 추적할 때 쓸 변수 이름을 정하고
- 의사코드를 메모한 뒤
solve로 옮기기
연습
막히는 북마크 문제 하나에 의사코드만 먼저 적어 보세요.
코드는 그다음입니다.
나쁜 예 / 좋은 예
나쁨: for 돌면서 if 해서 return
좋음: freq 맵 만든 뒤, 한 번 스캔하며 최초로 count==1인 문자 반환
구현 직전 질문
- 입력이 비면?
- 답이 없으면 무엇을 반환?
- 루프 변수 범위는 Inclusive인가?
한 줄
> 글로 되지 않으면 코드로도 안 된다. 의사코드가 설계다.
짧은 예시 (빈도 첫 등장)
freq ← 빈 맵
for ch in s:
freq[ch] += 1
for ch in s:
if freq[ch] == 1: return ch
return ""
이 6줄이 곧 해시맵 두 번 스캔 패턴입니다.
언어로 옮길 때는 맵 API만 바꾸면 됩니다.
관련
예제 추적·경계 케이스 레슨과 같이 쓰면 설계→검증→구현 순서가 됩니다.
더 깊게
읽은 뒤 연습장에서 예제 코드를 한 번 타이핑해 보세요. 눈으로만 보면 하루 뒤 사라집니다.
관련 원리 카드와 문제 태그로 바로 이어서 풀면, 문법·패턴이 한 묶음으로 남습니다.
막히면 30분 규칙: 입력을 로그로 확인 → 기대/실제 한 줄 비교 → 그래도 안 되면 배우기 레슨으로 잠시 복귀.