Step 337. 승패 분석과 다음 도전 설계 — 승리든 패배든 데이터다
Level 4 — 전문가 | 난이도 ★★★☆☆ | 예상 소요 시간 2일 (문제별 분석표 반나절 + 팀 운영 회의 반나절 + 개선 계획 1일)
전제: Step 336의 우승 도전 완료 — 결과 기록 양식(순위·문제별·운영 평가·승인 분리)이 채워져 있어야 합니다. 이 챕터는 이론 중심의 개념 챕터입니다.
- 준비물: 대회 결과 기록(Step 336 산출물), 우승팀 Write-up(공개되는 대로), 팀 채널, 파이썬 실행 환경(집계 스크립트). 결과 집계 스크립트는 여러분의 기록으로 돌리는 실측 도구이고, 대회 장면·스코어보드 인용은 화면 예시입니다.
- 주의: 이 챕터의 위험은 기술이 아니라 감정입니다 — 패배 직후의 회의는 "사람이 아니라 시스템을 분석한다"는 원칙의 사전 합의가 필요합니다.
- ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다. 못 푼 문제의 재현은 공개된 문제 파일과 로컬 환경에서만 수행합니다.
대회가 끝났습니다. 이겼든 졌든, 지금 팀에 남은 것은 데이터입니다. 그런데 이긴 팀과 진 팀의 반응은 보통 정반대의 오류를 범합니다 — 이긴 팀은 이유를 묻지 않고 축하만 하고, 진 팀은 이유 대신 감정을 나눕니다. 둘 다 데이터를 버리는 행위입니다.
소재 원문의 지적이 정확합니다. 우승해도 분석합니다 — "이긴 이유가 재현 가능한가(실력)인가, 운인가." 졌다면 더 정밀하게 봅니다 — 어떤 분야에서 점수를 뺏겼는가, 시간 운영은 어땠는가, 우승팀이 푼 우리가 못 푼 문제는 무엇인가. 오늘의 분석이 다음 도전 — 재도전이든 국제 파이널이든 — 의 설계도가 됩니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- 대회 결과를 문제별 분석표(솔브 여부·소요 시간·우승팀 대조)로 구조화한다
- 이긴 대회에서 승인을 실력/운으로 분리해 재현 가능성을 평가한다
- 팀 운영 회의를 "사람이 아니라 시스템" 원칙으로 진행한다
- 우승팀 Write-up으로 Step 327의 격차 분석을 반복 실행한다
- 분석 결과를 보완 계획·팀 헌장 개정·다음 목표 대회로 변환한다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 파이썬 3(결과 집계), 문서 편집기(분석표·회의록), 우승팀 Write-up |
| 오늘의 명령 | python step337_result_analysis.py — 분야별 득실·격차 좌표·효율 집계 |
| 필요한 개념 | 승인의 실력/운 분리, 시스템 분석 원칙, 격차 좌표, 개선 계획의 형식 |
| 오늘의 산출물 | 결과 분석 문서(분석표+회의록) + 보완 계획 + 팀 헌장 v2 + 다음 목표 대회 |
2-1. 이겼을 때의 분석 — 재현 가능성 심사
이긴 대회의 분석은 질문 하나로 시작합니다 — "이 승리를 다음 대회에서 다시 살 수 있는가." 승인을 두 통장으로 나눕니다.
| 통장 | 내용 | 예시 |
|---|---|---|
| 실력(재현 가능) | 커버리지, 규칙 집행, 라이브러리, 훈련량 | "상대가 못 푼 pwn을 우리 담당이 풂 — 분야 배치의 승리" |
| 운(재현 불가) | 출제 방향, 상대의 실수, 문제와 경험의 우연한 일치 | "crypto 고난도가 우승팀도 못 푸는 문제로 나옴" |
이 분리가 왜 필요한가 — 운의 통장에 있는 승인을 실력으로 착각하면, 다음 대회의 전략이 착각 위에 세워지기 때문입니다. 이긴 대회에서조차 "우리가 통제할 수 있었던 것"만이 다음 계획의 기둥이 됩니다. 축하는 짧게, 분석은 진하게 — 이것이 이긴 팀의 분석 예절입니다.
2-2. 졌을 때의 분석 — 세 개의 칸
진 대회의 분석은 소재 원문의 세 질문으로 구조화됩니다. ① 어떤 분야에서 점수를 뺏겼는가 — 문제별 분석표가 답합니다. ② 시간 운영은 어땠는가 — Step 326의 당일 로그 분석이 답합니다(운영 비율, 무진전 구간, 포기 시점). ③ 우승팀이 풀고 우리가 못 푼 문제는 무엇인가 — 이것이 격차의 좌표입니다.
세 번째가 가장 중요합니다. 순위의 차이는 추상이지만, "그들이 풀고 우리가 못 푼 문제 목록"은 구체입니다. 그 목록의 문제마다 Step 327의 대조표를 적용하면 — 지식의 격차인가, 도구의 격차인가, 시간 운영의 격차인가 — 보완 계획의 항목이 자동으로 떨어집니다. 패배는 이 좌표를 얻는 유일한 경로이기도 합니다. 이긴 대회는 우리가 잘한 것을 보여 주지만, 진 대회는 우리에게 없는 것을 보여 줍니다.
2-3. 회의의 원칙 — 사람이 아니라 시스템
패배 직후의 팀 회의는 감정이 섞이기 쉽습니다. 이를 막는 장치가 소재 원문의 사전 합의 문장입니다 — "사람이 아니라 시스템을 분석한다."
문장의 효과는 말의 변환에서 나옵니다. "네가 crypto를 못 풀어서 졌다"는 사람의 분석이고, "crypto 문제가 나오면 우리 팀이 멈춘다"는 시스템의 분석입니다. 전자는 방어와 반박을 부르고, 후자는 대책을 부릅니다 — 담당자를 갈아도 같은 결과가 나온다면 그것은 사람의 문제가 아니라 훈련 체계의 문제이기 때문입니다. 회의록의 문법 규칙으로 강제하세요 — 주어를 사람 이름이 아니라 "우리 팀은 / 이 분야는 / 규칙은"으로 시작하는 문장만 기록합니다.
2-4. 다음 도전의 설계 — 분석은 계획으로 끝난다
분석의 종착지는 세 개의 문서입니다. ① 분야별 훈련 목표 — 격차 좌표에서 도출된 보완 항목들(이것이 다음 챕터 Step 338의 입력값). ② 운영 규칙 개정 — 팀 헌장 v2 — 이번 대회에서 무너진 규칙, 새로 필요해진 규칙의 반영. ③ 다음 목표 대회의 선정 — 국내 재도전인가, 국제 파이널인가. 선정의 근거는 분석이 줍니다 — 국내 상위권과의 격차가 운영 수준인지, 기초 실력 수준인지에 따라 다음 무대의 크기가 정해집니다.
중요한 것은 실행 일정의 합의입니다. 분석 문서는 회의가 끝날 때까지가 아니라, 보완 항목이 팀원 개인의 달력에 들어갈 때까지 완성되지 않은 것입니다.
3. 따라 하기
3-1. 문제별 분석표 — 결과를 행으로 바꾼다
분석의 첫 산출물은 문제별 분석표입니다. 대회의 모든 문제를 행으로, 여섯 개의 열을 채웁니다.
■ 문제별 분석표 양식 (화면 예시):
| 분야 | 문제 | 배점 | 우리 솔브 | 소요(분) | 우승팀 솔브 |
|------|------|------|-----------|----------|-------------|
| web | chain-reaction | 300 | O | 150 | O |
| web | session-forge | 400 | X | — | O |
| ... | ... | ... | ... | ... | ... |
열 규칙:
- 우리가 못 푼 문제의 "소요"는 착수 후 포기까지의 시간 (0이 아님)
- 우승팀 열은 공식 스코어보드의 문제별 통계로 확인
"우승팀 솔브" 열이 이 표의 핵심입니다 — 우리가 못 푼 것은 아쉬움이지만, 우승팀이 풀었는데 우리가 못 푼 것은 격차이고, 우승팀도 못 푼 것은 대회 전체의 미해결이라 패인이 아닙니다. 세 상태(우리만 못 풂 / 둘 다 풂 / 둘 다 못 풂)를 구분하는 것이 분석의 해상도입니다.
3-2. 결과 집계 스크립트 — 표를 숫자로 요약한다
분석표가 채워지면 집계로 요약합니다. step337_result_analysis.py로 저장하세요 — GAMES의 샘플 데이터를 여러분의 분석표로 교체합니다.
# step337_result_analysis.py — 대회 승패 분석 집계기
# GAMES: (분야, 문제명, 배점, 우리 솔브 여부, 우리 소요 분, 우승팀 솔브 여부)
GAMES = [
("web", "chain-reaction", 300, True, 150, True),
("web", "session-forge", 400, False, 0, True),
("pwn", "heap-vault", 500, False, 0, True),
("pwn", "stack-basic", 200, True, 60, True),
("rev", "obf-box", 350, True, 180, True),
("crypto", "ecc-trap", 500, False, 0, False),
("crypto", "rsa-again", 250, False, 0, True),
("misc", "signal-noise", 300, True, 90, True),
]
print("=== 대회 결과 분석 집계 ===\n")
ours = sum(p for _, _, p, solved, _, _ in GAMES if solved)
theirs = sum(p for _, _, p, _, _, win in GAMES if win)
print(f"우리 팀 득점: {ours}점 / 우승팀 득점(이 문제 세트 기준): {theirs}점"
f" / 차이: {theirs - ours}점\n")
print("[분야별 손익]")
fields = sorted({g[0] for g in GAMES})
for f in fields:
rows = [g for g in GAMES if g[0] == f]
got = sum(p for _, _, p, s, _, _ in rows if s)
lost = sum(p for _, _, p, s, _, w in rows if not s and w)
zero = all(not s for _, _, _, s, _, _ in rows)
tag = " <- 0솔브 분야 (최우선 보완)" if zero and lost else ""
print(f" {f:<10} 획득 {got:>4}점 / 우승팀에게 뺏긴 {lost:>4}점{tag}")
print("\n[우승팀이 풀고 우리가 못 푼 문제 = 격차의 좌표]")
for field, name, pts, s, m, w in GAMES:
if not s and w:
print(f" {field}/{name} ({pts}점) — 우승팀 Write-up 대조 대상")
print("\n[우리가 푼 문제의 효율]")
for field, name, pts, s, m, w in GAMES:
if s:
print(f" {field}/{name}: {pts}점 / {m}분 = {pts/m:.1f}점/분")
print("\n다음 단계: 격차 좌표 문제마다 '왜 못 풀었나' 유형(지식/도구/시간 운영)을"
" 붙입니다 — Step 327의 프레임.")
예시 데이터로 실행한 실측 출력입니다:
=== 대회 결과 분석 집계 ===
우리 팀 득점: 1150점 / 우승팀 득점(이 문제 세트 기준): 2300점 / 차이: 1150점
[분야별 손익]
crypto 획득 0점 / 우승팀에게 뺏긴 250점 <- 0솔브 분야 (최우선 보완)
misc 획득 300점 / 우승팀에게 뺏긴 0점
pwn 획득 200점 / 우승팀에게 뺏긴 500점
rev 획득 350점 / 우승팀에게 뺏긴 0점
web 획득 300점 / 우승팀에게 뺏긴 400점
[우승팀이 풀고 우리가 못 푼 문제 = 격차의 좌표]
web/session-forge (400점) — 우승팀 Write-up 대조 대상
pwn/heap-vault (500점) — 우승팀 Write-up 대조 대상
crypto/rsa-again (250점) — 우승팀 Write-up 대조 대상
[우리가 푼 문제의 효율]
web/chain-reaction: 300점 / 150분 = 2.0점/분
pwn/stack-basic: 200점 / 60분 = 3.3점/분
rev/obf-box: 350점 / 180분 = 1.9점/분
misc/signal-noise: 300점 / 90분 = 3.3점/분
다음 단계: 격차 좌표 문제마다 '왜 못 풀었나' 유형(지식/도구/시간 운영)을 붙입니다 — Step 327의 프레임.
읽는 법: 네 블록이 각각 다른 질문에 답합니다. ① 총점 차 1150점 — "얼마나 졌나". ② 분야별 손익 — crypto에 "0솔브 분야" 태그가 붙었습니다. 소재 원문의 진단(상위권의 차이는 최약 분야가 결정)이 이 팀에도 그대로 적용됩니다. ③ 격차의 좌표 세 문제 — 이 목록이 Step 327 격차 분석의 대상 목록이자 Step 338 훈련 계획의 입력값입니다. ④ 효율 — rev/obf-box는 1.9점/분으로 풀긴 풀었지만 비쌌습니다. "푼 문제"의 비효율도 다음 계획의 재료입니다 — 같은 문제를 우승팀이 60분에 풀었다면 그 차이는 도구의 격차입니다.
3-3. 팀 운영 회의 — 시스템의 문법으로
집계가 끝나면 팀 회의를 엽니다. 2-3의 원칙을 집행 장치로 구체화한 진행 양식입니다.
■ 팀 운영 회의 진행표 (화면 예시 — 60분):
[00~10분] 원칙 낭독: "사람이 아니라 시스템을 분석한다."
문법 규칙: 회의록의 주어는 사람 이름 금지
[10~30분] 규칙 점검: 이번 대회에서 각 규칙이 지켜졌는가
— 열거 / 인수인계 / 시간 상한 / 스코어보드 / 식사
지켜진 규칙은 "유지", 무너진 규칙은 "무너진 시점"을 기록
[30~45분] 병목 특정: 로그에서 가장 긴 무진전 구간 3개
— 그때 팀은 무엇을 하고 있었는가, 규칙은 있었는가
[45~60분] 개정안 도출: 무너진 규칙 → 헌장 v2 조항으로 다듬기
마감 선언: "감상은 여기까지, 다음 안건은 계획"
읽는 법: 두 장치를 봅니다. ① 문법 규칙 — "B가 못 풀었다"가 아니라 "crypto 고난도에서 팀이 정체했다"로 기록하게 강제하는 것. 이 문법이 회의의 온도를 결정합니다. ② 마감 선언 — 회의의 끝을 감상이 아니라 계획으로 닫는 의식. 패배의 회의는 위로로 끝나면 재발하고, 개정 조항으로 끝나야 재발하지 않습니다.
3-4. 우승팀 Write-up 대조 — 격차 분석의 반복
우승팀(그리고 상위 팀들)의 Write-up이 공개되면, 3-2의 격차 좌표 세 문제에 대해 Step 327의 대조표를 돌립니다. 이 챕터에서 새로운 것은 없습니다 — 프레임은 이미 배웠고, 이번에는 우리가 우승을 노린 대회에 적용한다는 점만 다릅니다.
■ 격차 좌표 대조 결과 (화면 예시):
pwn/heap-vault (500점):
우승팀 풀이: tcache poisoning — 우리 라이브러리에 있는 기법
우리의 상태: 착수조차 못 함 — 담당 B가 crypto에 묶여 있었음
격차 유형: 시간 운영 (지식 아님!) → 처방: 담당 분산 규칙
crypto/rsa-again (250점):
우승팀 풀이: 공통 인수 공격 — gcd 한 줄
우리의 상태: 패턴 자체를 몰랐음
격차 유형: 지식 → 처방: crypto 패턴 카탈로그 보강 + 기출 재현 훈련
읽는 법: 두 문제의 처방이 완전히 다릅니다 — 같은 "못 푼 문제"인데 하나는 운영 규칙 개정이고 하나는 분야 훈련입니다. 대조 없이 "crypto를 더 공부하자"로 뭉뚱그렸다면 heap-vault의 진짜 패인(운영)은 영영 놓쳤을 것입니다. 격차 분석의 가치는 처방의 정확도에 있습니다.
3-5. 개선 계획과 다음 목표 — 분석의 종착지
분석을 세 문서로 닫습니다.
■ 개선 계획 (화면 예시):
1. 분야별 훈련 목표 (→ Step 338의 입력):
- crypto: 패턴 카탈로그 20종 정리 + 기출 10문제 재현·변형
- pwn: heap 계열 변형 문제 5종 (시간 운영 실수의 재발 방지 겸)
2. 팀 헌장 v2 개정 조항:
- 신설: 담당 분산 규칙 — 1인 2분야 동시 착수 금지
- 개정: 스코어보드 확인 회의에 "격차 좌표 후보" 기록 항목 추가
3. 다음 목표 대회: 3개월 뒤 국내 메이저 재도전
— 근거: 격차가 기초 실력이 아니라 커버리지·운영 수준으로 확인됨
— 국제 파이널은 그다음 (커버리지 완성 후)
실행 일정: crypto 훈련 매주 수·토 (담당 B, 보조 A) — 달력 등록 완료
마지막 줄이 완료 조건입니다 — 훈련이 "계획"에서 "일정"으로 변환됐는가. 문서에 있는 목표는 아직 존재하지 않는 목표이고, 달력에 있는 목표만이 실행됩니다.
4. 미션과 연습문제
미션 — 결과 분석 문서와 개선 계획
- 3-1의 양식으로 대회 전 문제의 분석표를 채웁니다 — 우승팀 솔브 열까지.
step337_result_analysis.py에 분석표를 옮겨 실행하고, 격차 좌표 목록과 0솔브 분야를 확인합니다.- 이겼다면 승인을 실력/운으로 분리한 문단을, 졌다면 세 칸(분야·시간 운영·격차 좌표)의 분석을 작성합니다.
- 3-3의 진행표로 팀 운영 회의를 열고 회의록을 남깁니다 — 문법 규칙(주어 제한)을 지켰는지 회의록으로 검증합니다.
- 격차 좌표 문제마다 우승팀 Write-up 대조표를 작성하고, 3-5의 세 문서(훈련 목표·헌장 v2·다음 대회)를 실행 일정과 함께 확정합니다.
연습문제
문제 1. 이긴 대회에서 승인을 실력/운으로 분리하지 않으면 다음 대회에서 어떤 오류가 생기는지, 구체적인 시나리오로 설명해 보세요.
문제 2. 문제별 분석표에서 "우승팀도 못 푼 문제"를 패인에서 제외하는 이유는 무엇인가요? 이 구분이 분석의 어떤 왜곡을 막는지 답해 보세요.
문제 3. "사람이 아니라 시스템을 분석한다"의 문법 규칙(회의록의 주어 제한)이 왜 회의의 결과를 바꾸는지, 말의 형태와 대책의 관계로 설명해 보세요.
문제 4. 3-4의 heap-vault 사례에서, 대조 없이 "crypto를 더 공부하자"로 뭉뚱그렸을 때 놓치는 것은 무엇이며, 격차 유형의 분류가 처방의 정확도를 어떻게 올리는지 설명해 보세요.
5. 모범 답안과 완료 기준
미션 모범 답안
검증 기준으로 확인하세요.
- 분석표의 완결성: 전 문제가 행으로 있고 "우승팀 솔브" 열이 공식 통계로 채워졌는가 — 우리 기록만 있는 표는 반쪽입니다.
- 집계의 실행: 스크립트 출력이 남아 있고 격차 좌표 목록이 후속 작업(대조표)으로 연결됐는가.
- 승패별 분석의 형식: 이겼다면 실력/운 분리 문단이, 졌다면 세 칸 분석이 존재하는가 — 감상문은 해당하지 않습니다.
- 회의록의 문법: 주어가 사람 이름인 문장이 없고, 무너진 규칙마다 "무너진 시점"이 기록됐는가.
- 계획의 전환: 세 문서가 확정되고 훈련 항목이 담당자와 요일까지 지정돼 달력에 들어갔는가.
연습문제 해답
문제 1 해답. 운의 승인을 실력으로 착각한 팀은 그 운이 사라진 다음 대회에서 같은 전략으로 패배합니다. 시나리오를 그려 보면 — 이번 대회에서 crypto 고난도가 우승팀도 못 푸는 문제로 나와 이겼다면, "crypto 보강 없이도 이길 수 있다"는 착각이 생깁니다. 다음 대회에서 crypto 중급이 나오면 그 팀은 무방비입니다. 승인의 분리는 다음 전략의 기둥을 "통제 가능했던 것"으로 제한하는 심사 절차입니다 — 커버리지와 규칙 집행처럼 재현 가능한 승인만이 다음 계획의 근거가 되고, 운의 통장에 있던 것은 감사히 받되 계획에는 넣지 않습니다.
문제 2 해답. 둘 다 못 푼 문제는 그 대회의 난이도 상한을 보여 줄 뿐, 우리 팀만의 결함이 아니기 때문입니다 — 그 문제에 점수를 "뺏긴" 팀은 아무도 없습니다. 이 구분이 없으면 생기는 왜곡은 보완 목록의 범람입니다 — 못 푼 모든 문제를 보완 대상으로 삼으면 목록이 실행 불가능하게 길어지고, 정작 우승팀과 우리를 갈라놓은 문제(격차 좌표)가 그 긴 목록에 묻힙니다. 분석의 목적은 완벽한 문제 목록이 아니라 우승팀과의 차이의 특정이므로, "그들이 풀고 우리가 못 푼" 조건이 목록을 실행 가능한 크기로 좁히는 필터입니다.
문제 3 해답. 문장의 주어가 그 문장이 부르는 반응을 결정하기 때문입니다. "B가 못 풀었다"는 주어가 사람인 문장으로, 듣는 사람의 방어 본능을 부르고 회의는 진실 추구에서 책임 공방으로 전환됩니다. "crypto에서 팀이 정체했다"는 주어가 시스템인 문장으로, 듣는 사람의 문제 해결 본능을 부릅니다 — 이 문장의 자연스러운 다음 문장은 질책이 아니라 "왜 정체했는가 / 무엇이 필요했는가"입니다. 그리고 실질적으로도 시스템 분석이 더 정확합니다 — 담당자를 바꿔도 같은 문제에서 멈춘다면 결함은 사람이 아니라 훈련 체계에 있기 때문입니다. 문법 규칙은 회의의 에티켓이 아니라 분석의 정확도 장치입니다.
문제 4 해답. 놓치는 것은 heap-vault의 진짜 패인 — 시간 운영 — 입니다. 그 문제는 지식의 격차가 아니었습니다(우승팀과 같은 기법을 라이브러리에 갖고 있었음). "못 푼 문제 = 더 공부할 분야"로 뭉뚱그리면 운영의 결함은 어떤 훈련 목록에도 들어가지 않고, 다음 대회에서 담당자가 다시 한 문제에 묶여 다른 문제를 놓치는 재발이 일어납니다. 격차 유형의 분류(지식/도구/시간 운영)는 각 유형에 대응하는 처방의 종류가 다르기 때문에 정확도를 올립니다 — 지식에는 훈련, 도구에는 라이브러리 보강, 시간 운영에는 규칙 개정. 유형이 정해져야 처방이 정해지고, 대조표는 그 유형을 판정하는 절차입니다.
완료 기준 체크리스트
- [ ] 전 문제의 분석표를 "우승팀 솔브" 열까지 완성했다
- [ ] 집계 스크립트를 실행해 0솔브 분야와 격차 좌표를 확인했다
- [ ] 승패에 맞는 분석(실력/운 분리 또는 세 칸 분석)을 문서로 작성했다
- [ ] 팀 운영 회의를 열고 문법 규칙이 지켜진 회의록을 남겼다
- [ ] 격차 좌표 전 문제의 우승팀 Write-up 대조표를 완성했다
- [ ] 팀 헌장 v2의 개정 조항을 확정했다
- [ ] 다음 목표 대회를 선정 근거와 함께 정했다
- [ ] 훈련 목표가 담당자·요일까지 지정된 일정으로 변환됐다
6. 흔한 실수와 해결
벽 1. 회의가 감정 싸움이 됐어요
증상: "그때 왜 그 문제를 잡았어"로 시작해 뒷맛이 나쁘게 끝납니다.
원인: 사전 합의 없이 회의를 시작했거나, 합의는 있었지만 집행 장치가 없었던 것입니다.
해결: 회의를 한 번 멈추고 장치부터 세우세요. ① 회의록의 문법 규칙을 화면에 띄웁니다 — 주어는 사람 이름 금지. ② 발언 형식을 고정합니다 — "문제 제기"는 "사실(로그 시각) + 시스템 해석"의 두 문장으로만. ③ 그래도 감정이 올라오면 회의를 24시간 연기합니다 — 패배 직후의 회의를 다음 날로 미루는 것은 회피가 아니라 설계입니다. 소재 원문의 지적대로 이 회의는 감정이 섞이기 쉬운 회의이고, 장치는 미리 또는 그 자리에서라도 반드시 세웁니다.
벽 2. 우승팀 Write-up이 안 올라와요
증상: 공식 풀이만 있고 우승팀의 상세 Write-up이 공개되지 않습니다.
원인: 흔한 일입니다 — 상위 팀은 전략 보호로 공개를 미루거나 생략합니다.
해결: 세 단계 대체재가 있습니다. ① 공식 출제자 해설 — 의도된 풀이의 골격은 줍니다. ② 2~5위 팀의 Write-up — 우승팀이 아니어도 그 문제를 푼 팀의 기록이면 대조는 가능합니다. ③ 재현 실패 기록의 보존 — Write-up이 나올 때까지 우리의 시도 내역을 보존해 두고, 나중에라도 공개되면 그때 대조합니다. 격차 분석은 기한이 있는 작업이 아닙니다 — 좌표만 저장돼 있으면 재료는 언제 도착해도 쓸 수 있습니다.
벽 3. 이겼는데 분석을 하자니 팀원들이 귀찮아해요
증상: "이겼는데 왜 자축을 못 하고 분석을 하냐"는 분위기.
원인: 이긴 대회의 분석 필요성이 공유되지 않은 것입니다 — 승리는 분석의 면제처럼 느껴지지만 실제로는 분석의 최적기입니다.
해결: 축하를 먼저, 분석은 48시간 안에 — 순서로 해결하세요. 그리고 설득의 논거는 하나입니다 — 이긴 대회의 로그는 우리 팀이 최고 컨디션일 때의 운영 표본입니다. 이 표본에서 "재현 가능한 승인"을 추출해 두지 않으면, 다음 대회에서 이긴 이유를 재현할 수 없습니다. 진 대회의 분석이 패인 제거라면, 이긴 대회의 분석은 승인의 보존입니다 — 둘 다 다음 우승의 재료입니다.
벽 4. 분석은 했는데 계획이 안 세워져요 — 회의만 길어져요
증상: 문제점 목록은 긴데 "누가 언제 무엇을"이 정해지지 않습니다.
원인: 분석과 계획의 변환 규칙이 없기 때문입니다 — 문제점은 저절로 계획이 되지 않습니다.
해결: 변환 규칙을 강제하세요 — 분석 문서의 모든 항목은 회의가 끝나기 전에 (담당자, 기한, 산출물)의 꼬리표를 달아야 하고, 꼬리표가 안 붙는 항목은 "보류" 칸으로 이동합니다. 보류는 삭제가 아니라 다음 회의의 첫 안건입니다. 그리고 3-5의 마지막 줄을 기억하세요 — 달력에 들어가지 않은 목표는 아직 존재하지 않습니다.
벽 5. 분석 결과가 "실력 부족"으로만 요약돼요 — 막막해요
증상: "우리가 못해서 졌다" 이상의 구조가 안 나옵니다.
원인: 분석의 해상도 부족입니다 — "실력 부족"은 분석의 결론이 아니라 분석을 시작하기 전의 문장입니다.
해결: 3-1의 분석표로 돌아가세요 — 해상도는 표의 열이 강제합니다. "실력 부족"이라고 느껴지는 대회도 문제 단위로 쪼개면 혼합물이 나옵니다 — 지식의 격차 두 문제, 운영의 손실 한 문제, 시간 부족 한 문제. 혼합물로 나뉘는 순간 막막함은 작업 목록으로 바뀝니다 — 각 항목은 크기가 작고 처방이 다르기 때문입니다. 막막함은 대상이 클 때 오는 감정이고, 분석은 대상을 작게 쪼개는 기술입니다.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 승인의 분리 | 재현 가능한 실력과 운의 두 통장 — 계획에는 실력만 |
| 격차의 좌표 | 우승팀이 풀고 우리가 못 푼 문제 — 분석의 정확한 과녁 |
| 0솔브 분야 | 상위권의 차이를 결정하는 곳 — 최우선 보완 태그 |
| 시스템 분석 원칙 | 주어를 사람에서 시스템으로 — 문법이 회의의 결과를 바꾼다 |
| 헌장 v2 | 무너진 규칙의 개정 — 회의는 조항으로 끝나야 재발하지 않는다 |
| 계획의 변환 | 분석 항목은 (담당, 기한, 산출물) 꼬리표를 달아야 계획이 된다 |
오늘의 도구·명령어
| 도구·명령 | 하는 일 |
|---|---|
python step337_result_analysis.py |
분야별 득실·격차 좌표·효율의 일괄 집계 |
| 문제별 분석표 | 배점·솔브·소요·우승팀 대조의 여섯 열 |
| 회의 진행표 | 원칙 낭독 → 규칙 점검 → 병목 특정 → 개정안 도출 |
| 격차 유형 분류 | 지식/도구/시간 운영 — 처방을 결정하는 판정 |
| 개선 계획 세 문서 | 훈련 목표 · 헌장 v2 · 다음 목표 대회 |
명령어보다 중요한 감각
승패 분석의 태도를 한 문장으로 줄이면 — 결과를 심판하지 말고 채굴하라입니다. 순위는 끝났지만 데이터는 지금부터 쓸 수 있습니다. 이긴 대회에서도, 진 대회에서도, 채굴의 양은 같습니다 — 오히려 진 대회가 더 많이 줍니다. 우리에게 없는 것을 보여 주는 유일한 자리이니까요.
그리고 이 챕터가 낳은 것을 확인하세요 — 격차 좌표와 0솔브 분야, 그리고 달력에 들어간 훈련 일정. 그것이 다음 챕터의 입력값입니다. 분석 없는 훈련은 관절 없는 손과 같고, 훈련 없는 분석은 장식입니다. 이제 그 좌표를 정면으로 정복하는 기간 — 약점 집중 훈련 — 으로 갑니다.
전부 체크되면 Step 337 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.