Step 338. 약점 집중 훈련 — 최상위권 완성: 잘하는 것을 더 하는 함정을 탈피한다
Level 4 — 전문가 | 난이도 ★★★★☆ | 예상 소요 시간 2일 이상 (약점별 훈련 계획 + 재현·변형 세션 + 점검 모의고사)
전제: Step 337의 승패 분석 — 격차 좌표 목록과 0솔브 분야 태그, 달력에 등록된 훈련 일정. 이 챕터는 분석의 결과물을 정복으로 바꾸는 워게임 챕터입니다.
- 준비물: Step 337의 약점 목록, 해당 분야의 기출 문제 파일(대회 공개 저장소·CTFtime 아카이브), 로컬 재현 환경, 파이썬 실행 환경(훈련 추적기). 훈련 추적 스크립트는 실측 도구이고, 기출 문제 풀이 장면은 화면 예시입니다.
- 주의: 이 챕터의 훈련은 대회가 종료된 기출 문제와 로컬 환경만 사용합니다 — 진행 중인 대회나 활성 플랫폼의 문제를 대상으로 하지 않습니다. 외부 플랫폼 접속 없이 작성됐으며, 모든 풀이 장면은 화면 예시입니다.
- ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다.
사람은 좋아하는 분야만 훈련하는 경향이 있습니다. web이 강한 사람은 web 기출을 더 풀고, crypto가 약한 사람은 crypto 세션을 다음 주로 미룹니다. 그런데 Step 337의 분석이 보여 준 대로, 대회 순위는 최강 분야가 아니라 최약 분야가 결정합니다 — 상위권 싸움에서 우승팀과 우리의 차이는 대개 "우리가 0솔브한 분야"였습니다.
오늘은 그 약점을 정면으로 훈련합니다. 방법은 정해져 있습니다 — 기출의 재현, 그리고 변형. 이 두 단계를 통과해야 "정복"이라고 부릅니다. 재미없는 분야를 억지로 하는 기간이 아니라, 팀의 바닥을 끌어올려 최상위권을 완성하는 기간입니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- 약점 분야의 기출 문제를 난이도 순으로 정렬해 훈련 계획을 세운다
- "재현 → 변형" 2단계 훈련법을 실행하고 각 단계의 판정 기준을 적용한다
- 훈련 추적 스크립트로 정복 진도를 수치로 관리한다
- 팀 내 지식 공유 세션(파인만 기법)을 열어 팀 전체의 바닥을 올린다
- 점검 모의고사로 약점 유형의 정복 여부를 검증한다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 약점 분야의 도구(예: crypto면 SageMath·z3, pwn이면 pwntools·gdb), 파이썬 3(추적기) |
| 오늘의 명령 | python step338_weakness_tracker.py — 재현/변형 통과 현황과 다음 우선순위 |
| 필요한 개념 | 재현 훈련, 변형 문제, 파인만 기법, 타임어택 점검, 성공 경험의 설계 |
| 오늘의 산출물 | 약점별 훈련 계획 + 정복 추적 기록 + 팀 공유 세션 자료 + 점검 모의고사 결과 |
2-1. 약점 제로화 — 바닥이 순위를 결정한다
Step 337의 집계가 보여 준 구조를 다시 봅니다 — 우승팀과의 점수 차는 우리가 잘하는 분야에서가 아니라 뺏긴 분야에서 벌어졌습니다. 이것은 우리 팀만의 이야기가 아니라 상위권의 일반 법칙입니다. 최상위권 팀들은 최강 분야의 점수가 비슷합니다 — 모두 회수하니까요. 차이는 바닥에서 납니다.
그래서 이 기간의 훈련 목표는 평소와 다릅니다. "더 잘하기"가 아니라 "0솔브 분야를 없애기". 완벽한 정복이 목표가 아니라, 그 분야의 기본~중급 문제가 대회에 나왔을 때 팀이 멈추지 않는 상태 — 그것이 제로화의 정의입니다. 바닥이 올라가면 최강 분야의 점수가 그대로 우승 경쟁력이 됩니다.
2-2. 재현 → 변형 — 정복의 2단계
약점 분야의 훈련법은 두 단계로 고정됩니다.
| 단계 | 내용 | 판정 기준 |
|---|---|---|
| 재현 | 종료된 대회 기출을 Write-up 없이 다시 푼다 | 로컬 재현 환경에서 플래그(또는 동등 결과) 획득 |
| 변형 | 조건을 바꿔 다시 푼다 — 파라미터·보호 기법·제약 교체 | 변형 조건에서도 통과 |
왜 변형까지인가 — 재현은 "이 문제를 풀 수 있다"를 증명하지만, 대회는 같은 문제를 내지 않기 때문입니다. 변형은 "이 문제의 기법을 꺼내 쓸 수 있다"를 증명합니다. 변형의 만드는 법은 간단합니다 — 문제의 핵심 조건 하나를 바꿉니다. crypto라면 파라미터 크기나 모드를, pwn이라면 보호 기법(Full RELRO 추가, glibc 버전 변경)을, web이라면 필터 규칙 하나를 더합니다. 변형까지 풀린 문제만이 추적기에 "정복"으로 기록됩니다.
2-3. 재미없는 분야의 심리 — 못해서 재미없는 것
약점 분야 훈련의 진짜 장애물은 난이도가 아니라 재미의 부재입니다. 그런데 소재 원문의 진단을 믿으세요 — 약점 분야는 "못해서 재미없는 것"이 대부분입니다. 인과가 거꾸로입니다. 성공 경험이 없으니 재미가 없고, 재미가 없으니 피하고, 피하니 성공 경험이 안 쌓입니다.
이 순환을 끊는 법은 의지가 아니라 난이도 설계입니다. 기출을 난이도 순으로 정렬하고, 현재 실력보다 한 단계 낮은 문제부터 시작합니다. 첫 세션의 목표는 학습이 아니라 성공 경험의 제조입니다 — 풀 수 있는 문제를 풀어 "이 분야도 풀린다"는 감각을 손에 넣는 것. 흥미는 선행 조건이 아니라 성공의 부산물입니다.
2-4. 파인만 기법 — 가르치는 것이 정복의 완성
약점 분야를 훈련한 사람이 팀에게 그것을 가르치는 세션은 선택이 아니라 절차의 일부입니다. 이유는 두 가지입니다. ① 가르칠 수 없으면 아직 모르는 것 — 설명하려는 순간 빈 곳이 드러납니다. "남에게 설명 가능한가"가 "진짜 이해했는가"의 가장 싸고 정확한 검사입니다. ② 팀의 바닥이 올라간다 — 대회에서 문제는 담당자에게만 출제되지 않습니다. crypto 담당의 컨디션이 무너진 날, crypto를 "조금 아는" 두 번째 사람이 팀의 바닥입니다.
세션의 형식은 가볍게 둡니다 — 30분, 문제 하나, "내가 막혔던 지점과 빠져나온 경로"를 화면 공유로 시연. 완성된 강의가 아니라 막힘의 재연이 핵심입니다. 듣는 사람에게 필요한 것은 풀이가 아니라 막혔을 때의 움직임이기 때문입니다.
3. 따라 하기
3-1. 약점 목록의 확정과 기출 정렬
Step 337의 산출물에서 약점 목록을 가져옵니다. 그리고 그 분야의 기출 문제를 모아 난이도 순으로 정렬합니다.
■ 약점 목록과 기출 정렬 (화면 예시 — Step 337의 결과에서):
약점 1: crypto 고난도 0솔브 (격차 좌표: rsa-again, ecc-trap)
약점 2: pwn heap 계열 (격차 좌표: heap-vault — 운영 문제였지만 보강 겸)
crypto 기출 정렬 (쉬운 순):
1. caesar-var (난이도 1) — 기본 대입 암호, 성공 경험 제조용
2. rsa-again (난이도 2) — 공통 인수 공격, 대회에서 뺏긴 문제
3. cbc-bitflip (난이도 3) — 모드의 구조 이해
4. ecc-trap (난이도 4) — 타원곡선, 대회에서 못 연 문제
5. ecc 변형 (난이도 4) — 파라미터 교체 버전 (직접 제작)
주 2회 세션 (수·토 저녁 2시간), 한 세션에 문제 1개
읽는 법: 정렬의 첫 칸이 "난이도 1"인 것에 주목하세요 — 2-3의 성공 경험 설계입니다. 그리고 목록에 대회에서 뺏긴 문제(rsa-again)가 2번으로 들어갔습니다 — 그 문제를 다시 푸는 것이 이 훈련의 상징적 통과 의례가 됩니다. 마지막의 "변형 — 직접 제작"은 3-3에서 만듭니다.
3-2. 재현 세션 — Write-up 없이, 그러나 기록은 하며
재현 세션의 규칙 세 가지입니다. ① Write-up 금지 — 기출의 공개 풀이를 보면 재현이 아니라 낭독입니다. ② 타임어택 — 대회 감각을 위해 세션 2시간을 상한으로. ③ 시도 내역 기록 — 막히면 막힌 지점과 버린 가설을 남깁니다(2시간 후 Write-up 열람 허용, 단 "어디까지 혼자 왔는가"가 기록된 뒤에).
■ 재현 세션 기록 (화면 예시 — crypto 세션 #2, rsa-again):
[00:00] 착수. N이 두 공개키에서 공유됨을 관찰 — "어디서 본 패턴"
[00:25] 가설: 공통 인수? gcd(N1, N2) 계산 — 1이 아닌 수가 나옴
[00:30] p 획득, 소인수분해 성공 — 개인키 복원, 플래그 복호화
[00:35] 통과. 소요 35분.
배운 것: "같은 문제를 대회에서는 3시간 묶여 있었는데, 패턴 카탈로그에
'공유된 N' 항목을 넣은 지금은 35분이다. 격차는 지식이 아니라 색인이었다."
마지막 문장이 이 훈련의 보고입니다 — 대회 당시의 실패가 "몰라서"가 아니라 "색인에 없어서"였음을 재현이 증명했습니다. 이 문장이 팀 공유 세션(3-4)의 원료입니다.
3-3. 변형 세션 — 조건을 바꿔 다시 푼다
재현을 통과한 문제는 변형을 만듭니다. 변형의 설계 원칙은 "핵심 기법은 유지, 주변 조건은 교체"입니다.
■ 변형 문제 설계 예시 (화면 예시):
원본: rsa-again — 두 공개키가 p를 공유 (공통 인수 공격)
변형 1: 세 개의 공개키 중 두 개만 공유 — gcd 쌍 비교로 특정 필요
변형 2: p 대신 q를 공유 + e가 65537이 아닌 값 — 개인키 계산의 일반화 확인
원본: heap-vault — tcache poisoning으로 임의 주소 쓰기
변형: glibc 2.32+ — tcache에 safe-linking 적용. 힙 주소 leak이 선행돼야 함
변형을 직접 만드는 행위 자체가 훈련입니다 — 문제의 어느 조건이 기법의 전제인지를 알아야 바꿀 수 있기 때문입니다. 변형을 설계할 수 있다는 것은 그 문제를 "문제 작성자의 눈"으로 보기 시작했다는 뜻이고, 그 시점이 대회에서 변형된 출제를 만나도 멈추지 않는 상태입니다.
3-4. 정복 추적기 — 진도를 수치로 본다
세션의 결과를 추적기에 기록해 정복 진도를 관리합니다. step338_weakness_tracker.py로 저장하세요.
# step338_weakness_tracker.py — 약점 분야 집중 훈련 추적기
# DRILL: (분야, 기출 문제, 난이도 1~5, 재현 통과, 변형 통과)
DRILL = [
("crypto", "rsa-again (기출 재현)", 2, True, True),
("crypto", "cbc-bitflip (기출 재현)", 3, True, True),
("crypto", "ecc-trap (기출 재현)", 4, True, False),
("crypto", "ecc-trap 변형 — 파라미터 교체", 4, False, False),
("pwn", "heap-vault (기출 재현)", 4, True, False),
("pwn", "heap-vault 변형 — 보호기법 추가", 5, False, False),
]
print("=== 약점 분야 훈련 정복 추적 ===\n")
fields = sorted({d[0] for d in DRILL})
for f in fields:
rows = [d for d in DRILL if d[0] == f]
rep = sum(1 for _, _, _, r, _ in rows if r)
var = sum(1 for _, _, _, _, v in rows if v)
total = len(rows)
conquered = all(r and v for _, _, _, r, v in rows)
print(f"[{f}] 재현 {rep}/{total}, 변형 통과 {var}/{total}"
f" — {'정복 완료' if conquered else '정복 진행 중'}")
print("\n[다음 세션 우선순위 — '재현은 됐는데 변형이 안 되는' 문제부터]")
todo = [d for d in DRILL if not (d[3] and d[4])]
for field, name, diff, r, v in sorted(todo, key=lambda d: (not d[3], -d[2])):
state = "재현부터" if not r else "변형 도전"
print(f" {'*' * diff:<5} {field}/{name} — {state}")
print("\n판정 규칙: 기출 재현(Write-up 없이) + 변형 통과 둘 다여야 '정복'입니다.")
예시 데이터로 실행한 실측 출력입니다:
=== 약점 분야 훈련 정복 추적 ===
[crypto] 재현 3/4, 변형 통과 2/4 — 정복 진행 중
[pwn] 재현 1/2, 변형 통과 0/2 — 정복 진행 중
[다음 세션 우선순위 — '재현은 됐는데 변형이 안 되는' 문제부터]
**** crypto/ecc-trap (기출 재현) — 변형 도전
**** pwn/heap-vault (기출 재현) — 변형 도전
***** pwn/heap-vault 변형 — 보호기법 추가 — 재현부터
**** crypto/ecc-trap 변형 — 파라미터 교체 — 재현부터
판정 규칙: 기출 재현(Write-up 없이) + 변형 통과 둘 다여야 '정복'입니다.
읽는 법: 두 가지를 봅니다. ① "정복 완료"가 하나도 없습니다 — 정상입니다. 정복의 판정은 재현+변형의 둘 다이고, 이 추적기의 가치는 "대충 해봤다"가 기록되지 않게 하는 데 있습니다. ② 우선순위의 정렬 — "변형 도전"이 "재현부터"보다 위에 있습니다. 재현까지 끝난 문제는 한 끗 남았으니 그것부터 닫는 것이 효율이고, 이 순서는 감이 아니라 규칙(정렬 키)으로 결정됩니다. 훈련 기간이 길어질수록 "다음에 뭘 하지"의 결정 피로가 정복률을 갉아먹습니다 — 추적기가 그 결정을 대신합니다.
3-5. 팀 공유 세션과 점검 모의고사 — 정복의 검증
훈련의 마지막 두 절차입니다. 먼저 공유 세션 — 약점 분야를 훈련한 사람이 30분짜리 세션을 엽니다.
■ 팀 공유 세션 형식 (화면 예시 — 30분):
- 주제: 문제 하나 (예: rsa-again과 공통 인수 공격)
- 구성: 문제 소개 5분 → 내가 막혔던 지점과 경로의 재연 15분 → Q&A 10분
- 규칙: "풀이 시연"이 아니라 "막힘의 재연" — 듣는 사람이 가져가는 것은 움직임
- 산출물: 세션 요약 한 장 → 팀 라이브러리 crypto/README에 링크
그리고 점검 모의고사 — 약점 분야가 포함된 문제 세트로 타임어택을 봅니다. 이것이 정복의 최종 검증입니다.
■ 점검 모의고사 설계 (화면 예시):
- 구성: crypto 2문제(기본+중급) + pwn heap 1문제 — 전부 훈련한 유형의 변형
- 조건: 3시간 타임어택, 대회 운영 규칙 일부 적용 (열거 순서, 기록)
- 통과 기준: 3문제 중 2문제 이상 + 0솔브 분야 없음
- 판정: 통과 → 제로화 완료, 다음 대회 준비로 / 미달 → 미달 유형만 2차 드릴
훈련한 것과 모의고사가 다른 점은 섞여 있다는 것입니다. 대회에서는 약점 분야의 문제가 강점 분야 사이에 끼어 나옵니다. 정서적으로 그 분야를 "일상의 한 문제"로 만드는 것까지가 제로화의 완성입니다.
4. 미션과 연습문제
미션 — 약점 유형별 정복 확인
- Step 337의 약점 목록을 확정하고, 각 분야의 기출 문제를 난이도 순으로 정렬합니다 — 첫 칸은 반드시 현재 실력보다 한 단계 낮게.
- 주 2회 세션으로 재현 훈련을 진행합니다 — Write-up 금지, 타임어택, 시도 내역 기록의 세 규칙 준수.
- 재현 통과 문제마다 변형 문제를 설계하고 변형 세션을 진행합니다.
step338_weakness_tracker.py에 결과를 기록해 우선순위대로 미달 항목을 닫습니다.- 팀 공유 세션(30분, 막힘의 재연)을 열고, 점검 모의고사로 정복 여부를 검증합니다 — 미달 유형은 2차 드릴로.
연습문제
문제 1. 대회 순위가 최강 분야가 아니라 최약 분야에서 결정되는 이유를, 상위권 팀들의 점수 구조로 설명해 보세요.
문제 2. "재현"만으로는 정복이라고 부르지 않고 "변형"까지 요구하는 이유는 무엇인가요? 각 단계가 증명하는 것의 차이로 답해 보세요.
문제 3. 약점 분야의 첫 세션을 현재 실력보다 한 단계 낮은 문제로 시작하는 이유를, 재미와 성공 경험의 인과 관계로 설명해 보세요.
문제 4. 팀 공유 세션에서 "풀이 시연"이 아니라 "막힘의 재연"을 요구하는 이유는 무엇인가요? 듣는 사람이 가져가는 것의 차이로 설명해 보세요.
5. 모범 답안과 완료 기준
미션 모범 답안
검증 기준으로 확인하세요.
- 정렬의 형식: 기출 목록이 난이도 순이고 첫 문제가 "성공 경험 제조용"으로 의도됐는가 — 어려운 것부터 정렬된 목록은 재미의 순환을 끊지 못합니다.
- 재현의 순수성: 세션 기록에 Write-up 열람 없이 도달한 지점이 명시됐는가 — 열람 후 재현은 "혼자 도달"로 기록하면 안 됩니다(기록의 정직성).
- 변형의 존재: 재현 통과 문제마다 변형 조건이 설계됐고, 변형의 통과/실패가 추적기에 반영됐는가.
- 공유 세션의 산출물: 세션 요약이 팀 라이브러리에 링크됐는가 — 팀의 자산으로 전환됐는가의 여부.
- 모의고사의 판정: 통과 기준(0솔브 분야 없음)에 대한 판정이 명시되고, 미달 시 2차 드릴 일정이 잡혔는가.
연습문제 해답
문제 1 해답. 최상위권 팀들은 각자의 최강 분야 문제를 거의 다 회수하므로, 최강 분야에서는 점수 차가 거의 나지 않습니다 — 모두 비슷하게 최고점을 받습니다. 차이는 한 팀이라도 0점을 기록한 분야에서만 생깁니다. 다른 팀이 그 분야의 기본 문제라도 회수하면 그 점수가 그대로 순위 차이가 됩니다. 따라서 상위권으로 올라갈수록 우승의 변수는 "강점의 깊이"에서 "약점의 존재 여부"로 이동하고, 이것이 훈련 자원을 약점에 재배분하는 근거입니다 — 같은 시간을 강점에 쓰면 기대 증분이 작고, 약점에 쓰면 0이던 점수가 생깁니다.
문제 2 해답. 재현은 "이 문제를" 풀 수 있음을, 변형은 "이 기법을 꺼내 쓸 수 있음"을 증명하기 때문입니다. 대회는 같은 문제를 출제하지 않으므로, 재현의 증명은 대회에서 유효하지 않습니다. 변형은 문제의 전제 조건 하나를 바꿔 기법의 적용 범위를 시험합니다 — 변형을 풀려면 그 기법이 무엇을 전제로 하는지 알아야 하고, 그 지식이 새 문제에서의 적용력입니다. 부수 효과로, 변형을 설계하는 행위 자체가 문제를 작성자의 눈으로 보는 훈련입니다. "문제를 아는 사람"과 "기법을 아는 사람"의 차이가 재현과 변형 사이에 있습니다.
문제 3 해답. 약점 분야의 재미 부재는 원인이 아니라 결과이기 때문입니다 — 성공 경험이 없어서 재미가 없고, 재미가 없어서 피하고, 피해서 성공 경험이 안 쌓이는 순환입니다. 이 순환의 고리를 끊을 수 있는 곳은 "성공 경험" 하나뿐이고, 성공 경험은 현재 실력 이하의 문제에서만 의도적으로 제조할 수 있습니다. 한 단계 낮은 문제로 시작하는 것은 훈련 강도의 타협이 아니라 순환 파괴의 설계입니다. 성공이 쌓이면 "이 분야도 풀린다"는 감각이 생기고, 흥미는 그 감각의 부산물로 따라옵니다 — 흥미를 기다리고 시작하면 영원히 시작하지 못합니다.
문제 4 해답. 풀이 시연은 결과의 경로만 보여 주지만, 대회에서 듣는 사람이 필요한 것은 결과가 아니라 막혔을 때의 움직임이기 때문입니다. 시연을 본 사람은 비슷한 문제에서 막히는 순간 "그때처럼 안 풀린다"는 정보만을 갖습니다. 반면 막힘의 재연은 "이런 증상에서 이런 가설을 세우고, 이렇게 버렸다"는 판단의 궤적을 전달합니다 — 그 궤적이 다른 문제에서도 재사용됩니다. 그리고 재연은 발표자에게도 검사가 됩니다 — 막힘을 재연할 수 있다는 것은 그 문제의 구조를 완전히 이해했다는 뜻이고, 파인만 기법의 취지(가르칠 수 없으면 아직 모르는 것)가 여기서 집행됩니다.
완료 기준 체크리스트
- [ ] Step 337의 약점 목록을 확정하고 기출을 난이도 순으로 정렬했다 (첫 칸 = 한 단계 아래)
- [ ] 재현 세션의 세 규칙(Write-up 금지·타임어택·시도 기록)을 지켰다
- [ ] 재현 통과 문제마다 변형을 설계하고 변형 세션을 진행했다
- [ ] 추적기에 재현/변형 결과를 기록하고 우선순위대로 진행했다
- [ ] 팀 공유 세션(30분, 막힘의 재연)을 열고 요약을 라이브러리에 남겼다
- [ ] 점검 모의고사(타임어택, 0솔브 분야 없음)로 정복을 검증했다
- [ ] 미달 유형이 있으면 2차 드릴 일정을 달력에 넣었다
6. 흔한 실수와 해결
벽 1. 약점 분야 세션을 자꾸 미뤄요
증상: 달력에는 수·토라고 적혀 있는데, 당일이 되면 강점 분야의 문제를 잡고 있습니다.
원인: 2-3의 순환 그대로입니다 — 재미없는 것은 미뤄지고, 미루는 순간 강점 분야가 즉시 성취감으로 유혹합니다.
해결: 세 가지 장치를 겹칩니다. ① 세션을 혼자의 약속이 아니라 팀의 약속으로 — 공유 세션 날짜를 먼저 잡으면 발표 준비가 훈련을 강제합니다. ② 첫 15분 규칙 — "15분만 한다"로 시작하는 것을 허용합니다. 대부분 15분 뒤에 문제에 들어가 있습니다. 시작의 저항이 장벽이지 세션의 지속이 장벽인 경우는 드뭅니다. ③ 강점 분야는 보상으로 재배치 — 약점 세션을 마친 날에만 강점 문제를 만지는 규칙. 유혹을 제거하는 것보다 용도를 바꾸는 쪽이 오래갑니다.
벽 2. 변형 문제를 어떻게 만드는지 모르겠어요
증상: 재현은 했는데 "조건을 바꾼다"는 게 무엇을 바꾸는 것인지 막막합니다.
원인: 문제의 전제 조건이 아직 열거되지 않은 것입니다 — 바꿀 후보가 보이지 않으니 설계가 안 됩니다.
해결: 변형의 후보는 문제의 전제 목록에서 나옵니다. 재현 세션의 기록을 보며 "이 풀이가 성립하기 위해 참이어야 하는 것"을 전부 적으세요 — 파라미터 크기, 보호 기법의 종류, 입력 형식, 외부 서비스의 존재. 그 목록의 각 항목이 변형 후보 하나입니다. 예시로 crypto의 rsa-again이라면 전제는 "N이 공유된다", "e가 표준값이다", "두 키가 주어진다" — 각각을 뒤집은 것이 3-3의 변형 1·2입니다. 전제를 적을 수 없다면 재현이 아직 완료되지 않은 것이니 돌아가세요 — 변형 설계는 이해의 시험이기도 합니다.
벽 3. 재현 중인 기출의 Write-up을 보고 싶은 유혹이 커요
증상: 1시간째 막히고, 검색창에 문제 이름을 칠 뻔합니다.
원인: 정상적인 유혹입니다 — 그리고 한 번 본 Write-up은 되돌릴 수 없습니다. 그 문제의 재현 가치는 그 순간 소멸합니다.
해결: 규칙을 시간으로 고정하세요 — 3-2의 세션 규칙(2시간 상한 + 기록 후 열람)이 그 장치입니다. 유혹이 오면 시도 내역을 기록하는 쪽으로 손을 돌립니다 — "지금 막힌 지점"을 적는 행위가 두 가지를 합니다. 유혹의 순간을 넘기고, 나중에 Write-up을 볼 때 "내가 어디까지 왔는가"의 대조를 가능하게 합니다. 그리고 기억할 것 — Write-up을 보고 푼 문제는 추적기에 "재현"으로 기록할 수 없습니다. 그것은 정직성의 문제이고, 기록이 정직하지 않으면 모의고사의 판정이 거짓이 됩니다.
벽 4. 공유 세션이 "강의 준비"로 부풀어요 — 발표 자료를 사흘 만들고 있어요
증상: 30분 세션을 위해 슬라이드 40장을 만들고 있습니다.
원인: 세션의 목적 혼동입니다 — 이 세션은 강의가 아니라 정복의 검증과 바닥 올리기입니다.
해결: 형식을 강제하세요 — 슬라이드 금지, 화면 공유 + 터미널만. 준비물은 두 개뿐입니다 — 재현 세션의 기록과, 변형 문제의 파일. "막혔던 지점"은 슬라이드로 설명하는 것이 아니라 터미널에서 그날의 명령을 다시 치며 보여 주는 것입니다. 준비 시간의 상한도 정합니다 — 세션 준비는 1시간. 1시간을 넘기는 준비는 대개 청중이 아니라 발표자의 자존심을 위한 것입니다(Step 332에서 배운 발표 자료 제작은 별개의 기술이고, 이 세션은 그 무대가 아닙니다).
벽 5. 모의고사에서 훈련한 유형인데도 못 풀었어요
증상: 재현과 변형을 둘 다 통과한 유형의 문제를 타임어택에서 놓쳤습니다.
원인: 세 가지 후보가 있습니다. ① 시간 압박의 부재 — 세션은 느긋했고 모의고사는 타이머가 있었습니다. ② 섞임의 효과 — 약점 분야 문제가 강점 분야 사이에 있을 때의 정서적 저항. ③ 판정의 착오 — 재현/변형의 통과가 성급했습니다(Write-up을 참고했다면).
해결: 원인을 분리해서 기록하세요. ①이면 다음 드릴에 타임어택을 기본 적용합니다. ②이면 모의고사를 한 번 더 봅니다 — 이 효과는 반복 노출로만 줄어듭니다. ③이면 정직성의 문제이니 그 유형을 "정복"에서 내려 2차 드릴로 보냅니다. 세 경우 모두 실패가 아니라 정보입니다 — 모의고사의 존재 이유가 정확히 이것입니다. 대회 당일에 발견될 결함을 오늘 발견한 것이니, 이 모의고사는 비용이 아니라 환불입니다.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 약점 제로화 | 순위는 최약 분야가 결정 — 0솔브 분야의 제거가 목표 |
| 재현 | Write-up 없이 기출을 다시 풂 — "이 문제를"의 증명 |
| 변형 | 전제 조건을 바꿔 다시 풂 — "이 기법을"의 증명 |
| 성공 경험의 설계 | 한 단계 낮은 문제부터 — 재미는 결과이지 전제가 아니다 |
| 파인만 기법 | 가르칠 수 없으면 아직 모르는 것 — 막힘의 재연이 세션의 형식 |
| 타임어택 점검 | 훈련과 대회의 간극(시간 압박·섞임)을 닫는 최종 검증 |
오늘의 도구·명령어
| 도구·명령 | 하는 일 |
|---|---|
python step338_weakness_tracker.py |
재현/변형 통과 현황과 다음 우선순위의 계산 |
| 기출 정렬 목록 | 난이도 순 + 첫 칸은 성공 경험 제조용 |
| 재현 세션 세 규칙 | Write-up 금지 · 2시간 상한 · 시도 내역 기록 |
| 전제 목록 | 변형 설계의 후보 — "이 풀이가 참이기 위해 필요한 것" |
| 점검 모의고사 | 약점 유형 포함 세트 + 0솔브 분야 없음 판정 |
명령어보다 중요한 감각
이 기간의 훈련이 평소와 다른 점을 하나만 기억하세요 — 좋아하는 것이 아니라 필요한 것을 한다는 것. 그리고 그 불편함이 정확히 이 훈련의 가치의 증거입니다. 좋아하는 분야의 훈련은 누구나 합니다 — 그래서 강점의 차이는 상위권에서 벌어지지 않습니다. 아무도 하고 싶어 하지 않는 약점의 정면 훈련만이 순위표의 차이를 만듭니다.
추적기의 "정복 완료"가 하나씩 늘 때마다, 팀의 바닥이 올라가고 있습니다. 0솔브 분야가 사라진 팀은 더 이상 출제 방향의 운에 결과를 맡기지 않습니다. 다음은 그 완성된 전력으로 다시 무대에 서는 일 — 국내 재도전이든, 국제 파이널이든. 지금까지의 여정이 만든 팀의 최종 형태를, 그 무대에서 확인하게 됩니다.
전부 체크되면 Step 338 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.