사고 · beginner

의사코드: 구현 전에 뼈대 쓰기

언어 문법에 막히기 전에 단계와 불변조건을 글로 고정합니다.

배우기 · 문제 푸는 사고 · 12분 · 6/10 · 사고 · 설계

이 트랙 목차 (10)
  1. 1. 문제 읽기: 입출력·제약·목표
  2. 2. 예제 추적: 손으로 한 스텝
  3. 3. 경계·엣지 케이스 목록화
  4. 4. 오답·실패 케이스 분석
  5. 5. 패턴 고르기: 제약으로 후보 줄이기
  6. 6. 의사코드: 구현 전에 뼈대 쓰기
  7. 7. 시간 상자: 막힐 때 멈추는 규칙
  8. 8. 접근 비교: 브루트 · 해시 · 투포인터
  9. 9. 회귀 확인: 고친 뒤 다시 채점
  10. 10. 작은 테스트 직접 쓰기

왜 쓰나

바로 타이핑하면 인덱스와 분기가 섞인 채 디버그하게 됩니다.
5~10줄 의사코드가 있으면 “무엇을 하려는지”와 “버그”를 분리할 수 있습니다.

템플릿

입력 파싱 → tokens / n / arr
전처리(정렬·빈도·가드)
핵심 루프:
  불변조건: …
  갱신: …
출력 포맷

언어 키워드(for, def)보다 상태 이름을 먼저 정하세요: lo, hi, best, freq.

불변조건

루프가 돌 때마다 참이어야 하는 문장입니다.

예: “[0..i)는 이미 처리했고 best는 그 구간의 최대 합”

불변조건을 말할 수 없으면 아직 알고리즘이 없습니다.

이 사이트에서

  1. 문제 읽기 체크리스트 후
  2. 예제 1개를 표로 추적할 때 쓸 변수 이름을 정하고
  3. 의사코드를 메모한 뒤
  4. solve로 옮기기

연습

막히는 북마크 문제 하나에 의사코드만 먼저 적어 보세요.
코드는 그다음입니다.

나쁜 예 / 좋은 예

나쁨: for 돌면서 if 해서 return
좋음: freq 맵 만든 뒤, 한 번 스캔하며 최초로 count==1인 문자 반환

구현 직전 질문

한 줄

> 글로 되지 않으면 코드로도 안 된다. 의사코드가 설계다.

짧은 예시 (빈도 첫 등장)

freq ← 빈 맵
for ch in s:
  freq[ch] += 1
for ch in s:
  if freq[ch] == 1: return ch
return ""

이 6줄이 곧 해시맵 두 번 스캔 패턴입니다.
언어로 옮길 때는 맵 API만 바꾸면 됩니다.

관련

예제 추적·경계 케이스 레슨과 같이 쓰면 설계→검증→구현 순서가 됩니다.

더 깊게

읽은 뒤 연습장에서 예제 코드를 한 번 타이핑해 보세요. 눈으로만 보면 하루 뒤 사라집니다.

관련 원리 카드와 문제 태그로 바로 이어서 풀면, 문법·패턴이 한 묶음으로 남습니다.

막히면 30분 규칙: 입력을 로그로 확인 → 기대/실제 한 줄 비교 → 그래도 안 되면 배우기 레슨으로 잠시 복귀.

관련 짧은 원리

관련 문제