Codepass Expert Training § 05 · Schedule
Training 목차 C++ only
TRAINING § 05 — 매 주차가 한 개의 무기를 장착한다

"열심히"는 계획이 아니다. 8주는 8개의 무기다.

§01은 데이터를 보는 다섯 루틴을, §02는 제약을 읽는 네 체크리스트를, §03은 코드를 고치는 개선 전략을, §04는 클러스터별 실전 연습을 줬다. 그러나 도구를 아는 것과 시험장에서 손이 먼저 움직이는 것은 다르다. 이 페이지는 그 간극을 메우는 8주 훈련 교범이다. 매주 정확히 하나의 무기를 장착하고, 일일 과제로 손에 익히고, 주말에 점검한다. Week 8의 마지막 날, 당신은 ../exam-day.html의 압축 패키지를 펼치고 — 거기 적힌 모든 것을 이미 손이 기억하고 있음을 확인하게 된다.

8-week program 주차별 무기 장착 3 daily templates Tool → No-tool

§ 1설계 원리 — 왜 8주이고, 왜 주차마다 무기 하나인가

시험장에서 무너지는 응시자의 공통점은 실력이 없는 게 아니라 — 아는 것을 순서대로 꺼내지 못하는 것이다. 데이터 분석을 알지만 어디부터 찍을지 망설이고, N값 함의를 알지만 30초 안에 판정하지 못하고, 개선 전략을 알지만 막상 점수가 안 오르면 막무가내로 코드를 뜯어고친다. 지식은 있는데 절차가 없다. 8주 스케줄은 그 절차를 손에 새기는 과정이다.

이 프로그램은 세 가지 원리 위에 서 있다. 첫째, 한 번에 하나의 무기. 매주 정확히 하나의 능력만 집중 훈련한다. 분석 루틴을 외우는 주에는 제약 추론을 신경 쓰지 않는다 — 여러 개를 동시에 익히면 어느 것도 손에 남지 않는다. 둘째, 장착 → 정비 → 사격. 각 주는 새 무기를 장착(개념 습득)하고, 일일 과제로 정비(반복 숙달)하고, 주말 점검으로 사격 시험(검증)을 거친다. 셋째, 도구에서 도구 없음으로. Week 1~6은 Visual Studio·printf를 마음껏 쓴다. Week 7은 그 도구를 모두 빼앗고 종이와 머리만으로 같은 판단을 재현한다 — 시험장은 결국 도구가 제한된 환경이기 때문이다.

원리무기 장착의 순서는 시험장의 사고 순서와 같다

8주의 순서는 임의가 아니다. 시험장에서 응시자의 머리가 실제로 거치는 단계 — 데이터를 본다 → 제약을 읽는다 → 알고리즘을 짠다 → 점수를 개선한다 → 도구 없이 재현한다 → 실전 시뮬레이션 — 을 그대로 8주에 펼친 것이다. Week 1-2(분석)는 §01, Week 3-4(추론)는 §02, Week 5-6(실전)은 §03·§04, Week 7(무도구)은 시험장 조건, Week 8(모의고사)은 ../exam-day.html로 이어진다. 훈련의 순서가 곧 시험의 순서다 — 그래서 8주를 마치면 시험장의 사고 흐름이 이미 한 번 리허설된 상태가 된다.

발상의 전환 많은 응시자가 "8주 동안 21문제를 다 풀어보겠다"는 계획을 세운다. 그것은 계획이 아니라 소망이다 — 문제 수를 채우는 것은 측정하기 쉽지만 능력으로 환산되지 않는다. 이 스케줄은 문제 수가 아니라 무기 수로 진도를 센다. "이번 주에 분석 루틴 5개를 보지 않고 재현할 수 있는가" — 이런 능력 기준의 체크포인트가 매 주말에 박혀 있다. 풀어본 문제 수가 아니라, 손이 기억하는 절차의 수가 시험 점수를 만든다.
8주가 없다면 시험까지 8주가 안 남았다면, 압축이 가능하다. 4주: Week 1·3·5·7을 한 주씩(2주차 짝을 생략). 2주: Week 1(분석) + Week 7(무도구)만 — 가장 중요한 두 무기. 1주 미만: 8주 스케줄을 버리고 ../exam-day.html의 "오늘 밤 4시간 계획"으로 직행하라. 단 압축할수록 손가락 기억은 옅어진다 — 가능하면 8주 전체를 권한다.

§ 28주 한눈에 — 무기 장착표

아래 표는 8주 전체를 한 장으로 압축한 것이다. 훈련 중 길을 잃으면 이 표로 돌아온다 — "지금 몇 주차이고, 이번 주의 무기는 무엇인가". 강조된 행은 프로그램의 두 정점이다: Week 1-2(모든 것의 토대)Week 7(도구 박탈 — 가장 시험장에 가까운 주).

주차장착하는 무기연결 가이드주말 점검 기준
Week 15개 분석 루틴의 암기 — 히스토그램·밀도·거리§013개 루틴을 빈 에디터에서 재현
Week 25개 분석 루틴의 손 숙달 — 요약·구조탐침까지§015개 전부 60초 내 재현 + 출력 해석
Week 3제약 → 분포 연역 — 4개 패턴, N값 함의표§02제약만 보고 분포 예측 → 실측 일치율 80%
Week 4PASS 역산 + 30초 퀵레퍼런스§02새 문제 1개를 30초 안에 등급 판정
Week 5클러스터별 4단계 훈련 — 클러스터 1~3 순회§04 · §03클러스터당 분석→추론→개선 1회 완주
Week 6클러스터별 4단계 훈련 — 클러스터 4~5 + 약점 보강§04 · §035개 클러스터 전부 1회 이상 완주
Week 7도구 박탈 — 종이·머리만으로 분석→설계 재현§01~§04 종합무도구 3문제 판정 → 도구로 검증, 일치
Week 8실전 모의고사 + exam-day 패키지 숙지exam-day4시간 모의 2회 완주 + 패키지 암기
표를 쓰는 법 매주 일요일 저녁, "주말 점검 기준" 칸의 항목을 실제로 해본다. 통과하면 다음 주로, 통과하지 못하면 그 주를 하루~이틀 연장한다 — 무기가 손에 안 잡힌 채 다음 주로 넘어가면 그 위에 쌓는 모든 것이 흔들린다. 8주는 최소 일정이지 마감이 아니다. 점검 기준이 진도의 유일한 척도다.
두 정점 — Week 1-2와 Week 7 8주 중 두 주가 특별히 중요하다. Week 1-2는 분석 루틴을 손에 새기는 토대 — 이게 없으면 이후 6주가 공중에 뜬다. Week 7은 도구를 빼앗는 주 — 시험장은 인터넷도 검색도 없는 환경이고, Week 1~6에서 도구에 의존해 키운 능력이 도구 없이도 작동하는지 검증하는 유일한 주다. 시간이 부족하면 다른 주를 줄이더라도 이 두 주는 온전히 지켜라.

§ 3Week 1-2 — 분석 루틴 숙달 · 데이터를 보는 손을 만든다

처음 2주의 임무는 단 하나 — §01의 다섯 분석 루틴(히스토그램 · 2D 밀도 맵 · 거리 분포 · 요약 통계 · 구조 탐침)을 보지 않고 재현할 수 있게 만드는 것이다. 시험장에서 데이터를 분석하려면 그 코드를 그 자리에서 짜야 한다. 검색할 수 없고, 미리 저장해둔 파일을 불러올 수도 없다. 손이 기억해야 한다.

장착하는 무기 — "printf 하나로 격자를 여는 손"

이 2주가 끝나면 빈 main.cpp 앞에서 — 어떤 데이터든 — 60초 안에 분석 코드를 꽂을 수 있어야 한다. 무기는 "분석 능력"이 아니라 "분석 코드를 즉석에서 재현하는 손가락 기억"이다. 개념은 §01에서 이미 배웠다. Week 1-2는 그 개념을 근육으로 옮긴다.

불변Week 1-2 내내 지키는 규칙

매일 실제 문제 하나의 main.cpp에 분석 코드를 직접 꽂는다. 이론으로 외우지 않는다 — 21문제 중 하나를 골라, 그 채점기의 make_tc()를 읽고, §01의 방법 A(user 함수 안에서 인자를 찍는다)로 분석 함수를 호출하고, 실제 출력 창에서 분포를 본다. 손이 거치는 전 과정 — 채점기 정독, analyze() 호출 삽입, 컴파일, 출력 해석 — 을 매일 1회씩 반복한다. 2주면 14회. 14회면 손이 기억한다.

Week 1 일일 과제Week 2 일일 과제
루틴 ① 히스토그램 — 코드 정독 + 1회 손코딩루틴 ④ 요약 통계 — 손코딩 + skew 해석 연습
루틴 ① 재현 — 보지 않고 빈 에디터에 작성루틴 ⑤ 구조 탐침 — 손코딩 + sorted/dup 해석
루틴 ② 2D 밀도 맵 — 코드 정독 + 1회 손코딩루틴 ④⑤ 연속 재현 — 두 개를 한 번에
루틴 ② 재현 + 군집/산포 출력 해석루틴 ①~⑤ 통합 — 한 문제에 다섯 개 전부 꽂기
루틴 ③ 거리 분포 — 코드 정독 + 손코딩통합 재현 — 다섯 루틴을 보지 않고 연속 작성
주말점검: 루틴 ①②③ 빈 에디터 재현 + 셀프 채점점검: 루틴 ①~⑤ 전부 60초 내 재현 + 출력 해석
week1.cpp · 일일 과제의 형태매일 이 흐름을 손으로 반복
// 1단계: 오늘의 문제 채점기에서 make_tc()를 정독 — 무엇이 생성되는가// 2단계: user 함수에 분석 루틴을 보지 않고 직접 작성한다void init(Coordinates pts[], int n) {    static int xs[100000], ys[100000];    for (int i = 0; i < n; i++) { xs[i] = pts[i].x; ys[i] = pts[i].y; }    histogram(xs, n, "x coord");     // 루틴 ① — 외워서 작성    density(xs, ys, n, MAP_SIZE);   // 루틴 ② — 외워서 작성    distDist(xs, ys, n);            // 루틴 ③ — 외워서 작성    fflush(stdout);    return;                         // 분석만 하고 종료 — §01 방법 A}// 3단계: Ctrl+F5로 실행, 출력 창에서 분포를 읽고 한 줄로 메모//   "x 균등 / 점 산포 / 평균쌍거리 ~420" 같은 한 줄
Week 1과 Week 2의 차이 Week 1은 정독 후 손코딩 — §01 페이지를 옆에 띄워두고 한 줄씩 옮겨 쓴다. 한 줄을 옮길 때마다 "이 줄이 왜 필요한가"를 속으로 답한다. Week 2는 보지 않고 재현 — 페이지를 닫고 빈 에디터에 처음부터 작성한다. 막히면 페이지를 1초만 열어 확인하고 다시 닫는다. Week 1이 "이해", Week 2가 "체화"다.
함정 — 읽기만 하고 손은 안 쓰는 것 가장 흔한 실패 — §01 페이지를 다섯 번 읽고 "이제 안다"고 착각하는 것. 읽어서 아는 것과 손이 재현하는 것은 다른 능력이다. 분석 루틴의 histogram()은 약 20줄이다 — 그 20줄을 머뭇거림 없이 칠 수 있어야 시험장에서 1분 안에 분석이 끝난다. Week 1-2는 반드시 키보드를 두드리는 시간이 페이지를 읽는 시간보다 길어야 한다. 읽기 30%, 손코딩 70%.
출력 해석도 무기다 루틴을 재현하는 것만으로는 부족하다. 출력을 읽는 능력도 같이 길러야 한다. 히스토그램 막대가 평평하면 "균등 — 영역 가정 금지", 밀도 맵에 짙은 덩어리가 있으면 "군집 — 분할 전략", summary()sd가 범위의 29%면 "균등 확정". §01의 각 "읽는 법" 박스를 함께 외운다 — 출력을 보고 0초 안에 한 단어("균등"/"군집"/"정렬")가 튀어나와야 한다.

§ 4Week 3-4 — 제약 추론 · 시드를 안 돌리고 분포를 본다

Week 1-2가 데이터를 관측하는 손을 만들었다면, Week 3-4는 데이터를 연역하는 머리를 만든다. §02의 핵심 — 시드를 한 번도 돌리지 않고, main.cpp의 제약 상수만 읽고 분포를 머릿속에 그리는 능력이다. 관측은 정확하지만 30초~1분이 걸리고, 연역은 읽는 즉시다. 시험장에서는 연역으로 먼저 알고리즘 등급을 정하고, 관측으로 확인한다.

장착하는 무기 — "코드를 읽고 분포를 상상하는 30초"

이 2주의 무기는 제약 → 분포의 자동 번역기다. pseudo_rand() % 300 + 100을 보는 순간 머릿속에서 "100~399 균등, 평균 250, σ≈87"이 — 계산이 아니라 반사로 — 떠올라야 한다. Week 3은 분포를 연역하고, Week 4는 그 연역을 PASS 역산까지 밀어붙여 알고리즘 등급을 30초 안에 판정한다.

Week 3제약 → 분포 — 예측하고 검증하는 루프

Week 3의 일일 과제는 예측-검증 루프다. 한 문제의 make_tc()를 읽되 — 절대 컴파일하지 않는다. 먼저 종이에 각 변수의 분포를 적는다: "센터 501~1000 균등 / 좌표 중복없는 균등 / 재고 2~100 삼각, 평균 51". 그 다음에야 §01의 분석 루틴을 꽂아 실제로 돌린다. 종이의 예측과 출력 창의 실측을 나란히 놓고 비교한다 — 맞았는가, 틀렸다면 어느 패턴을 놓쳤는가. 예측이 틀린 곳이 곧 §02에서 다시 읽을 곳이다.

Week 4PASS 역산 — CUT에서 알고리즘 등급을 거꾸로 푼다

Week 4는 §02 §5의 PASS 역산 공식과 §7의 30초 퀵레퍼런스를 손에 익힌다. 매일 새 문제의 CUT(또는 scoreOfThisTC)을 찾아, "단위당 허용 비용"을 역산하고, 세 판정 중 하나 — 헐겁다(그리디로 충분) · 빡빡하다(정밀+개선 필수) · 닿는다(기본기+튜닝) — 를 내린다. 마지막엔 30초 퀵레퍼런스 표(0–5s N, 5–10s TC, 10–20s 분포, 20–25s CUT, 25–30s 한 줄 판정)를 실제로 타이머를 켜고 30초 안에 완주한다.

Week 3 일일 과제 (분포 연역)Week 4 일일 과제 (등급 판정)
패턴 1·2 (% N, % N+K) — 예측-검증 루프 1회PASS 역산 공식 ①②③ 정독 + 예제 따라 풀기
패턴 3 (합 분포) — 삼각/정규 예측 후 검증새 문제로 PASS 역산 — 비용형 문제 1개
패턴 4 (do-while 중복제거) — 보장 추출새 문제로 PASS 역산 — 처리량형 문제 1개
N값 함의표 외우기 — 5개 행 + 대표 문제30초 퀵레퍼런스 — 타이머 켜고 1문제
한 문제 전체 — 4패턴 모두 종이로 예측 후 검증30초 퀵레퍼런스 — 타이머 켜고 새 문제 2개
주말점검: 새 문제 1개, 예측-실측 일치율 80% 이상점검: 처음 보는 문제 1개를 30초 내 등급 판정
Week 3 예측-검증 루프 — 하루치 작업의 형태
  1. 읽기 — 오늘의 문제 make_tc()를 정독한다. 컴파일 금지. pseudo_rand()가 등장하는 모든 줄을 찾는다.
  2. 예측 — 종이에 각 변수의 분포를 적는다. % N 패턴이면 "[0,N) 균등, 평균 N/2, σ≈0.289N", + 두 개면 "삼각, 가운데 몰림".
  3. 검증 — 이제 §01의 histogram·summary를 꽂아 실제로 돌린다. 출력 창의 실측 min/max/mean/sd를 종이에 함께 적는다.
  4. 대조 — 예측과 실측을 나란히 본다. 평균이 ±10% 안, σ가 ±15% 안이면 그 변수는 "맞음". 벗어나면 "틀림".
  5. 복기 — 틀린 변수의 원인을 §02에서 찾는다. "+1을 놓쳤다", "do-while 필터를 못 봤다", "if로 갈라지는 조건부 생성을 놓쳤다". 그 패턴이 다음 날 집중 대상.
왜 예측을 먼저, 검증을 나중에 순서가 핵심이다. 출력을 먼저 보면 — 머리는 분포를 연역하지 않고 읽는다. 그건 Week 1-2의 관측 능력이지 Week 3의 연역 능력이 아니다. 반드시 종이에 예측을 다 적은 뒤에야 컴파일한다. 예측이 틀려도 좋다 — 틀린 예측을 실측으로 교정하는 그 한 번이, 다음 문제의 예측을 정확하게 만든다. 예측 없이 본 출력은 능력으로 남지 않는다.
함정 — 추론을 맹신하는 것 §02가 경고하듯 — 제약 추론은 방향을 맞추는 도구이지 정답을 주는 도구가 아니다. do-while 안의 숨은 필터, if로 갈라지는 조건부 생성, 좌표를 군집 중심 주변에 뿌리는 코드는 추론만으로 놓친다. Week 3-4의 검증 단계를 절대 생략하지 마라 — 시험장에서도 30초 추론 뒤에는 반드시 §01의 분석 루틴 한 번으로 가설을 확인한다. 추론으로 시작하고, 관측으로 확정한다.

§ 5Week 5-6 — 실전 연습 · 5개 클러스터를 순회한다

Week 1-4는 무기를 따로따로 익혔다 — 분석은 분석, 추론은 추론. Week 5-6은 그것들을 한 문제 위에서 동시에 쓴다. §04의 클러스터별 4단계 훈련 — 분석(§01) → 추론(§02) → 개선(§03) → 머리 재현 — 을 5개 클러스터에 순서대로 적용한다. 클러스터는 Expert 21문제를 알고리즘 성격으로 묶은 5개의 부족이다. 클러스터별로 한 대표 문제를 골라 4단계를 완주한다.

장착하는 무기 — "분석부터 개선까지 한 흐름으로 꿰는 손"

이 2주의 무기는 개별 도구가 아니라 도구를 잇는 흐름이다. 데이터를 보고(§01), 제약을 읽고(§02), 알고리즘을 짜고, 점수가 모자라면 개선한다(§03) — 이 네 단계가 끊김 없이 이어져야 한다. 단계 사이에서 망설이면 4시간 시험이 무너진다. Week 5-6은 그 이음매를 매끄럽게 한다.

불변한 문제 = 4단계 1완주

Week 5-6의 단위는 "문제 하나"가 아니라 "4단계 1완주"다. 한 문제를 골랐으면 — 분석 루틴을 꽂아 데이터를 보고, 제약을 읽어 등급을 판정하고, baseline 알고리즘을 짜고, §03의 개선 전략(병목 탐지·파라미터 스윕·A/B 비교)으로 점수를 끌어올리고, 마지막으로 도구를 닫고 그 풀이 흐름을 머릿속에서 한 번 재생한다. 한 문제를 절반만 풀고 다음으로 넘어가지 않는다 — 4단계를 다 거쳐야 1완주다.

주차순회하는 클러스터한 클러스터에서 하는 일
Week 5클러스터 1·2·3 — 한 클러스터에 약 2일대표 문제 1개 골라 4단계 완주 → 같은 클러스터 2번째 문제로 흐름 반복
Week 6클러스터 4·5 + 약점 클러스터 재방문4·5 클러스터 4단계 완주 → Week 5에서 가장 막혔던 클러스터 1개 재훈련
한 클러스터 2일 사이클
1일차 전반단계 1·2 — 분석 + 추론. 대표 문제 채점기 정독 → §01 루틴으로 데이터 관측 → §02로 제약 추론 → 30초 등급 판정. 종이에 "이 문제는 ___형 + ___등급" 한 줄.
1일차 후반단계 3 — baseline 구현. 판정한 등급의 가장 단순한 알고리즘으로 컴파일되는 코드. PASS 못해도 점수가 수치로 나오게.
2일차 전반단계 3 계속 — 개선. §03의 병목 탐지 → 파라미터 스윕 → A/B 비교로 점수를 끌어올린다. 매 개선마다 점수 측정, 안 오르면 롤백.
2일차 후반단계 4 — 머리 재현. 도구를 닫고 그 문제의 풀이 흐름 전체를 말로 1분 안에 설명. 막히는 지점이 다음 클러스터에서 보강할 약점.
4단계 훈련 — 한 클러스터에서의 완주 절차
  1. 단계 1 · 분석 — 대표 문제 채점기의 make_tc()를 정독하고, §01의 분석 루틴(히스토그램·밀도·거리)을 꽂아 데이터의 모양을 관측한다. "균등인가 군집인가 정렬인가" 한 단어.
  2. 단계 2 · 추론 — §02의 30초 퀵레퍼런스로 N·TC·분포·CUT을 읽고, PASS 역산으로 알고리즘 등급을 판정한다. "헐겁다/빡빡하다/닿는다" 중 하나.
  3. 단계 3 · 개선 — 판정한 등급의 baseline을 짜고, §03의 개선 전략(병목 탐지 → 파라미터 스윕 → A/B 비교)으로 점수를 끌어올린다. 매 변경 후 시드 100개로 점수 측정.
  4. 단계 4 · 머리 재현 — Visual Studio를 닫는다. 그 문제의 풀이 흐름 — "어떤 분석 → 어떤 자료구조 → 어떤 그리디 → 어떤 개선" — 을 종이나 말로 1분 안에 재구성한다. 이 단계가 Week 7의 예고편이다.
5개 클러스터를 빠짐없이 Week 5-6의 목표는 한 클러스터를 깊게 파는 게 아니라 5개 전부를 한 번씩 거치는 것이다. 시험에 어느 클러스터가 나올지 모르기 때문이다 — 자신 있는 클러스터만 반복하면 약한 클러스터가 시험에 나왔을 때 무너진다. Week 6 후반의 "약점 클러스터 재방문"은 그래서 중요하다. Week 5에서 4단계 완주가 가장 버벅인 클러스터를 골라 한 번 더 — 약한 곳을 메우는 것이 강한 곳을 더 강하게 하는 것보다 점수에 크게 기여한다.
함정 — 단계 3에서 막무가내로 고치는 것 baseline이 PASS에 못 미치면 조급해진다 — 그래서 코드를 마구 뜯어고친다. 그것은 §03이 가장 경계하는 행동이다. 점수가 안 오르면 병목을 먼저 측정하고(어느 부분이 점수를 깎는가), 파라미터를 한 번에 하나씩 훑고, 두 버전을 같은 시드로 겨뤄본다. 막무가내 수정은 운이 좋으면 +α, 나쁘면 멀쩡하던 코드까지 망친다. 개선은 측정으로 시작한다.

§ 6Week 7 — 도구 없는 훈련 · 시험장 조건을 시뮬레이션한다

앞의 6주는 Visual Studio·printf·출력 창을 마음껏 썼다. Week 7은 그것을 전부 빼앗는다. 시험장은 결국 도구가 제한된 환경 — 인터넷 검색 없고, 미리 만든 분석 파일 없고, 컴파일과 실행이 느리다. 도구에 의존해 키운 능력이 도구 없이도 작동하는지 — 이번 주가 그 유일한 검증이다.

장착하는 무기 — "도구 없이도 무너지지 않는 머리"

Week 7의 무기는 새 지식이 아니라 독립성이다. 종이와 머리만으로 — 컴파일 한 번 없이 — 채점기를 읽고, 분포를 연역하고, 알고리즘 등급을 판정하고, 풀이의 골격을 설계하는 능력. Week 3-4의 제약 추론과 Week 5-6 단계 4의 머리 재현이 이 주의 토대다. Week 7은 그 둘을 합쳐 "도구 없는 완주"로 끌어올린다.

규칙Week 7의 도구 박탈 규칙

이번 주 동안 다음을 금지한다: Visual Studio 컴파일·실행, printf 출력 확인, §01~§04 페이지 열람, 인터넷 검색. 허용되는 것: main.cpp 채점기 소스 읽기(시험장에서 화면에 뜨므로), 종이, 펜, 그리고 머리. 데이터를 "보는" 것이 금지되므로 — 데이터를 전부 연역해야 한다. 이것이 시험장의 실제 조건에 가장 가까운 상태다.

Week 7 일일 과제 (무도구)
새 문제 1개 — 채점기만 읽고 종이에 분포·N·TC·CUT 연역. 컴파일 금지.
월요일 문제 — 종이에 알고리즘 등급 판정 + baseline 설계도(자료구조·정렬·그리디 흐름).
새 문제 2개 — 각각 채점기 읽고 30초 등급 판정. 손목시계로 시간 측정.
새 문제 1개 — 분석→추론→설계 전 과정을 종이로 완주. 풀이 골격까지.
검증의 날 — 한 주 동안 종이로 판정한 문제들을 이제 컴파일·실행해 실측과 대조.
주말점검: 새 문제 3개 무도구 판정 → 도구로 검증, 등급 판정 일치하면 통과.
Week 7 무도구 완주 — 한 문제를 종이로만 푸는 절차
  1. 채점기 정독main.cpp를 처음부터 끝까지 읽는다. make_tc()의 모든 pseudo_rand() 줄, for (tc < TC) 루프, scoreOfThisTC()를 찾아 표시한다.
  2. 분포 연역 — 종이에 각 변수의 분포를 적는다. Week 3-4의 4패턴 번역기를 머리로만 돌린다. % N + K → "[K,K+N) 균등, 평균 K+N/2, σ≈0.289N".
  3. 등급 판정 — N값 함의표(머리로)로 허용 복잡도를 정하고, PASS 역산으로 단위당 허용 비용을 계산한다. "헐겁다/빡빡하다/닿는다".
  4. 설계도 작성 — 종이에 풀이 골격을 그린다: 어떤 자료구조(PQ? Union-Find? 인접리스트?) → 어떤 정렬 → 어떤 그리디 → 어떤 개선. ../exam-day.html의 판단 트리를 머리로 따라간다.
  5. 검증(금요일) — 이제 컴파일한다. 종이의 분포 예측 vs 실측, 종이의 등급 판정 vs 실제 PASS 여부. 어긋난 곳이 도구 없이는 아직 약한 부분 — 마지막 주에 보강할 목록.
왜 도구를 빼앗는가 시험장에서 응시자가 무너지는 가장 흔한 순간 — "데이터를 못 보겠다"는 막연함이다. Week 1-6 내내 printf로 데이터를 봤다면, 도구가 느리거나 막힐 때 머리가 멈춘다. Week 7은 그 의존을 미리 끊는다. 도구 없이 한 주를 버텨내면, 시험장에서 도구는 "있으면 좋은 보조"가 되지 "없으면 무너지는 생명선"이 아니게 된다. §01이 가르친 "데이터를 만드는 코드를 본다"는 발상 — Week 7이 그것을 도구 없이도 작동하게 만든다.
함정 — 검증을 건너뛰는 것 무도구 훈련의 위험은 — 종이에 적은 연역이 맞았는지 확인하지 않으면 틀린 직관이 굳어진다는 것이다. 금요일의 검증 단계는 선택이 아니다. 종이 예측과 실측을 반드시 대조하라. 등급 판정이 어긋났다면, 그 원인(놓친 패턴, 잘못된 N 읽기, CUT 오독)을 Week 8 모의고사 전에 메모로 남긴다. 무도구 훈련은 "도구 없이 해본다"가 아니라 "도구 없이 한 뒤 도구로 채점한다"이다.

§ 7Week 8 — 모의고사 + exam-day 패키지 · 8주의 종착점

마지막 주다. 7주 동안 무기를 하나씩 장착했다 — 분석·추론·실전·무도구. Week 8은 그 전부를 실전 조건에서 한꺼번에 쏜다. 4시간 모의고사를 시계까지 맞춰 두 번 치르고, exam-day 압축 패키지를 손에 익혀 시험 전날과 당일의 행동까지 리허설한다.

장착하는 무기 — "실전 4시간을 통째로 리허설한 손"

Week 8의 무기는 통합 실행력이다. 분석·추론·개선을 각각 잘하는 것과, 4시간이라는 압박 속에서 시간 분배까지 지키며 셋을 연달아 해내는 것은 다른 능력이다. 모의고사가 그 차이를 메운다. 그리고 ../exam-day.html이 시험 당일의 행동 — 시간 분배표, 판단 트리, 막혔을 때 리셋 프로토콜, 제출 전 체크리스트 — 까지 손에 새긴다.

Week 8 일일 과제
모의고사 1회차 — 처음 보는 문제, 4시간 타이머. exam-day의 시간 분배표(0:15 정독 / 0:30 선택 / 1:30 baseline / 3:30 검증)대로.
1회차 복기 — 시간 분배 어디서 어긋났나, 어느 단계가 느렸나. exam-day "자주 하는 실수 25" 대조.
exam-day 코드 스니펫 12선 — 손으로 따라치며 외운다. PQ·Counting Sort·Dijkstra·Integral Image 우선.
모의고사 2회차 — 다른 문제, 4시간. 1회차 약점을 의식하며. baseline을 1:30 안에 반드시.
2회차 복기 + exam-day 판단 트리 8문항 암기 + 실전 패턴 4축 점검.
주말점검: exam-day 패키지 전체 — 시간 분배표·판단 트리·스니펫 12선·실수 25를 보지 않고 떠올릴 수 있는가.
모의고사 4시간 — exam-day 시간 분배표 적용Week 8 월·목요일 실전 시뮬레이션
// 0:00-0:15  문제 정독 + 모델 분해 — 키보드 금지, 손으로 노트//            §02 30초 퀵레퍼런스로 N·TC·분포·CUT 판정// 0:15-0:30  알고리즘 선택 — exam-day 판단 트리 8문항//            main 입출력 골격만 작성 + 컴파일// 0:30-1:30  baseline 구현 — §01 분석 루틴 꽂아 데이터 확인 후//            가장 단순한 그리디. PASS 못해도 점수가 수치로 나오게// 1:30-2:00  제출 가능 점수 — 그리디 휴리스틱 추가, PASS 80% 목표// 2:00-3:00  최적화 라운드 1 — §03 파라미터 스윕, 30분마다 측정// 3:00-3:30  최적화 라운드 2 — 미세 가속. 큰 리팩토링 금지// 3:30-4:00  검증 — 시드 5/100/999 점수 측정, 제출 형식 확인//            ★ 이 30분 절대 새 코드 금지 ★
모의고사를 진짜 시험처럼 모의고사의 가치는 "문제를 푼다"가 아니라 "시간 압박을 미리 겪는다"에 있다. 반드시 4시간 타이머를 켜고, 중간에 멈추지 말고, 화장실·물도 시험장처럼 관리하라. 1:30에 baseline이 안 되면 — 실제 시험처럼 — 그 알고리즘을 즉시 포기하고 더 단순한 것으로 전환하는 결단까지 연습한다. 우아한 0점보다 60% 점수가 항상 이긴다는 것을, 모의고사에서 몸으로 배운다.
Week 8 마지막 날 — exam-day 패키지 최종 점검
  1. 시간 분배표 — 4시간을 7구간으로 나눈 표를 보지 않고 그릴 수 있는가. 특히 "1:30 baseline 데드라인"과 "3:30 새 코드 금지"를.
  2. 판단 트리 8문항 — Q1(점수=거리최소?)부터 Q8(사각형 합 쿼리?)까지, 문제를 보면 트리를 따라 알고리즘이 30초에 나오는가.
  3. 코드 스니펫 12선 — PQ·Counting·Radix·Dijkstra·Floyd·BFS·Integral·Union-Find·비트마스크DP·2-opt·prand·타이머. 빈 에디터에서 5분 내 복원되는가.
  4. 실전 패턴 4축 — PQ-Greedy+Stale skip, 사전계산 O(N²)·쿼리 O(1), 두 번 호출 정보추출, Baseline 그리디+Local Search. 막혔을 때 돌아갈 안전망.
  5. 실수 25 — int overflow, 전역 vs 지역 배열, 매 TC 초기화, strict 비교 위반 등. 아는 것을 빠뜨리지 않는 것이 모르는 것을 외우는 것보다 +20점.
8주의 끝, 시험의 시작 Week 8 마지막 날 밤, ../exam-day.html을 펼쳐보라. 거기 적힌 12개 스니펫 — 손이 안다. 8개 판단 트리 — 머리가 안다. 시간 분배표 — 모의고사로 두 번 겪었다. 실수 25 — Week 5-6에서 다 부딪혀봤다. exam-day 페이지가 "내일 시험용 압축 패키지"라면, 이 8주는 그 패키지의 모든 항목을 이미 손에 새겨두는 과정이었다. 8주 전에는 그 페이지가 외울 목록이었고, 8주 후에는 확인 목록이 된다. 그것이 이 스케줄의 종착점이다.

§ 83개 일일 루틴 템플릿 — 매일·주말·D-7

8주 스케줄이 "무엇을"을 정했다면, 일일 루틴 템플릿은 "어떻게 하루를 쓰는가"를 정한다. 막연한 "오늘 공부한다"가 아니라, 분 단위로 짜인 세 개의 틀 — 평일 90분 루틴(주중 매일), 주말 3시간 루틴(점검과 보강), D-7 집중 루틴(시험 직전 한 주) — 이다. 8주 내내 평일·주말 루틴을 돌리고, 마지막 주에 D-7 루틴으로 전환한다.

템플릿 ① — 평일 90분 루틴 (주중 월~금)

직장·학교와 병행하는 응시자를 위한 최소 단위. 하루 90분, 일주일 5회 — 한 주에 7.5시간이면 그 주의 무기 하나를 손에 익히기에 충분하다. 90분을 셋으로 쪼갠다.

평일 90분10 + 65 + 15 — 복습·본훈련·기록
  1. 0–10분 · 어제 복습 — 어제 손코딩한 루틴 하나를 빈 에디터에 다시 재현한다. 워밍업이자 망각 방지. 어제 것이 손에 안 남았으면 오늘 진도를 멈추고 어제를 다시 한다.
  2. 10–75분 · 오늘의 본훈련 — 그 주차·그 요일의 일일 과제(§3~§7의 표)를 수행한다. 키보드를 두드리는 시간이 페이지를 읽는 시간보다 길어야 한다. 한 문제의 한 단계에 집중 — 욕심내서 여러 단계를 건드리지 않는다.
  3. 75–90분 · 기록 — 오늘 한 것을 한 줄로 적는다: "루틴 ② 재현 성공 / 밀도 맵 출력에서 군집 3개 확인". 막힌 것도 한 줄: "distDist의 표본 LCG 시드 부분 헷갈림 → 내일 재확인". 이 기록이 주말 점검의 재료다.
90분이 안 될 때 하루가 도저히 안 날 때 — 최소 단위는 10분 복습만이라도. 어제 루틴 하나를 재현하는 10분은, 일주일 통째로 쉬는 것보다 손가락 기억을 훨씬 잘 지킨다. 진도는 못 나가도 망각은 막는다. 단 이 "10분만" 날이 한 주에 2회를 넘으면 그 주의 무기는 손에 안 잡힌다 — 주말 루틴에서 보강해야 한다.

템플릿 ② — 주말 3시간 루틴 (토 또는 일, 주 1회)

주말은 평일과 성격이 다르다. 새 진도가 아니라 — 한 주의 무기가 정말 손에 잡혔는지 점검하고, 안 잡힌 곳을 보강하는 시간이다. 3시간을 넷으로 쪼갠다.

주말 3시간30 + 90 + 45 + 15 — 점검·보강·통합·계획
  1. 0–30분 · 주말 점검 — §2 표의 "주말 점검 기준" 칸을 실제로 해본다. "분석 루틴 3개를 빈 에디터에서 재현" 같은 항목을 타이머 켜고 통과/실패 판정. 정직하게.
  2. 30–120분 · 약점 보강 — 평일 5일치 기록에서 "막힌 것" 한 줄들을 모은다. 가장 자주 막힌 한 가지를 골라 90분간 집중 재훈련. 점검에서 실패한 항목이 있으면 그것을 최우선.
  3. 120–165분 · 통합 1회 — 그 주에 익힌 무기를 실제 문제 하나 위에서 처음부터 끝까지 한 번 굴린다. 분석 주차면 5루틴 전부 꽂기, 추론 주차면 30초 퀵레퍼런스 완주. 도구를 잇는 연습.
  4. 165–180분 · 다음 주 계획 — §2 표에서 다음 주차를 확인하고, 5일치 일일 과제를 미리 훑는다. 다음 주 첫날 망설임 없이 시작하기 위한 예열.
함정 — 주말을 새 진도로 쓰는 것 주말에 욕심이 난다 — "평일에 못 한 만큼 주말에 앞서 나가자". 그러나 주말의 임무는 점검과 보강이지 진도가 아니다. 점검 없이 다음 주로 넘어가면, 손에 안 잡힌 무기 위에 다음 무기를 쌓게 되고 — 8주 후 모든 게 흔들린다. 주말 점검에서 실패하면 그 주를 하루~이틀 연장하라. 8주는 마감이 아니라 최소 일정이다.

템플릿 ③ — D-7 집중 루틴 (시험 직전 7일)

Week 8과 겹치는 마지막 한 주, 혹은 8주 스케줄을 다 못 채웠더라도 시험이 7일 앞으로 다가왔을 때의 루틴이다. 이 주의 원칙은 하나 — 새것을 외우지 않는다, 아는 것을 손에 굳힌다. ../exam-day.html의 "오늘 밤 4시간 계획"이 D-1의 압축판이라면, D-7 루틴은 그 일주일판이다.

D-7 집중시험 7일 전부터 당일까지의 하루별 틀
  1. D-7 · D-6 — exam-day 코드 스니펫 12선을 손으로 따라친다. 하루 6개씩. 보지 않고 5분 내 복원될 때까지. PQ·Counting·Dijkstra·Integral Image 우선.
  2. D-5 · D-4 — 4시간 모의고사 1회씩(총 2회). exam-day 시간 분배표대로. 끝나면 그날 안에 30분 복기 — 시간 분배가 어디서 어긋났는가.
  3. D-3 · D-2 — exam-day 판단 트리 8문항 + 실전 패턴 4축 암기. 새 문제를 보고 트리를 따라 알고리즘이 30초에 나오는지 확인. 무도구로.
  4. D-1 (시험 전날) — 새 학습 금지. exam-day "오늘 밤 4시간 계획"을 따른다: 스니펫 한 번씩, 최근 문제 풀이 흐름 재생, 판단 트리·실수 25 훑기. 그리고 잠 7시간은 절대 깎지 않는다.
  5. D-Day (시험 당일) — 기상 후 5분만: 판단 트리 한 번 + 시간 분배표 한 번. 그게 전부. 나머지는 exam-day 페이지의 "시험 시작 전 5분 루틴"과 시간 분배표가 인도한다.
D-7 루틴의 철학 — 손가락 기억 시험 일주일 전의 새 알고리즘 학습은 역효과다. exam-day 페이지가 못박듯 — 새벽 코딩은 다음날 손가락에 안 남는다. D-7 루틴은 "외우기"가 아니라 "굳히기"다. 이미 8주(혹은 그 일부) 동안 익힌 무기를 — 시험장에서 머뭇거림 없이 꺼낼 수 있도록 — 손에 한 번 더 새긴다. 점수를 +10 올리는 것은 새 지식이 아니라, 아는 것을 0.1초 빨리 꺼내는 손이다.
템플릿언제총량핵심 임무
① 평일 90분주중 월~금 (8주 내내)주 7.5h그 주 무기의 일일 과제 — 손코딩 70%
② 주말 3시간토 또는 일, 주 1회 (8주 내내)주 3h점검 · 약점 보강 · 통합 1회 · 다음 주 예열
③ D-7 집중시험 직전 7일 (Week 8과 겹침)새것 금지 · 아는 것 굳히기 · 모의고사 2회
세 템플릿의 합주 세 템플릿은 따로 노는 게 아니다. 평일 루틴이 매일 무기를 갈고, 주말 루틴이 매주 그 무기를 점검하며, D-7 루틴이 마지막 주에 모든 무기를 시험장 조건으로 굳힌다. 8주 = 평일 루틴 40회 + 주말 루틴 8회, 그리고 마지막 7일이 D-7 루틴. 이 합주가 끝나면 — exam-day 페이지를 펼쳤을 때 거기 적힌 모든 것이 이미 손에 있다.

§ 98주의 끝 — Training이 끝나고 exam-day가 시작된다

5개 섹션, 8주, 3개의 일일 루틴 템플릿. Training 코너의 마지막 페이지가 여기서 끝난다. 그러나 이 페이지의 진짜 끝은 — 8주 뒤 시험장 문 앞에 선 당신이다.

되짚어 보자. §01printf 하나로 데이터의 격자를 여는 다섯 루틴을 줬다. §02는 시드를 안 돌리고 제약만으로 분포를 연역하는 네 체크리스트를 줬다. §03은 코드를 막무가내가 아니라 측정으로 고치는 개선 전략을 줬다. §04는 5개 클러스터에 그 모두를 적용하는 4단계 훈련을 줬다. 그리고 §05 — 이 페이지 — 는 그 네 무기를 8주에 걸쳐 손에 새기는 순서를 줬다.

불변Training 코너가 한 약속

이 코너는 한 번도 "더 많은 알고리즘을 외워라"라고 말하지 않았다. ../exam-day.html에 이미 12개 스니펫·8개 판단 트리가 있다 — 알고리즘은 그것으로 충분하다. Training이 메우려 한 것은 다른 간극 — 아는 것과 손이 먼저 움직이는 것 사이다. 데이터를 분석할 줄 아는 것과 빈 에디터에서 60초 안에 분석 코드를 짜는 것, 제약을 이해하는 것과 30초 안에 등급을 판정하는 것, 개선 전략을 읽은 것과 점수가 안 오를 때 침착하게 병목을 측정하는 것. 8주는 그 간극을 메운다.

마지막 — 다음 페이지로 8주 스케줄의 종착점은 exam-day · 시험 당일 전략이다. 그 페이지는 "내일 시험용 압축 패키지" — 시간 분배표, 알고리즘 판단 트리 8문항, 코드 스니펫 12선, 실전 패턴 4축, 자주 하는 실수 25, 멘탈 관리. 8주 훈련을 시작하는 지금 그 페이지를 펼치면, 그것은 외워야 할 목록이다. 8주를 마치고 그 페이지를 펼치면, 그것은 이미 손에 있는 것을 확인하는 목록이 된다. Training은 여기서 끝나고 — exam-day에서, 당신의 시험이 시작된다.