Step 339. 최고 수준의 승부 — 국내 재도전 또는 국제 파이널: 실력 차이는 작고, 운영이 승부를 가른다

Step 339. 최고 수준의 승부 — 국내 재도전 또는 국제 파이널: 실력 차이는 작고, 운영이 승부를 가른다

Level 4 — 전문가 | 난이도 ★★★★★ | 예상 소요 시간 2일 이상 (준비 사이클 + 대회 완주 + 결과 기록)

전제: Step 324~326의 국내 대회 사이클, Step 328의 국제 대회 운영, Step 338의 약점 집중 훈련 완료. 팀의 운영 규칙과 교대 규칙이 문서로 확정돼 있어야 합니다.

  • 준비물: 목표 대회 1개(국내 메이저 재도전 또는 국제 파이널), 확정된 팀 운영 문서(교대표·스왑 규칙·막힘 트리), Step 338의 약점 훈련 결과표, 팀 채널. 후반전 전략 스크립트는 여러분의 대회 상황으로 돌리는 실측 도구이고, 대회 장면과 순위는 전부 화면 예시입니다.
  • 주의: 이 수준의 대회는 변수가 큽니다. 오늘의 완료 기준은 순위가 아니라 "최선의 준비와 실행을 했는가"에 예라고 답할 수 있는가입니다.
  • ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다. 대회 규정(팀 인원, 외부 협업 금지, 툴 사용 범위)을 시작 전에 읽고 지킵니다.

약점 보완 훈련까지 마친 여러분은 이제 목표의 최종 추격선 위에 서 있습니다. 국내 대회 우승 재도전이든, 국제 대회 파이널 진출 도전이든 — 이 무대에서는 참가 팀 간의 실력 차이가 이미 작습니다. 전부 준비된 팀들입니다.

그래서 승부는 다른 곳에서 갈립니다. 당일의 운영, 막힌 문제를 버리는 결단의 속도, 마지막 3시간의 관리, 그리고 무너지지 않는 멘탈. 지금까지 쌓은 모든 것 — 실력, 팀워크, 운영 규칙, 멘탈 관리 — 을 믿고 실행하는 대회입니다. 오늘은 그 실행을 가장 잘 돕는 절차를 정리합니다.


1. 학습 목표

이 챕터를 끝내면 다음을 할 수 있습니다:

  • 최고 수준 대회에서 "실력 외 변수"가 승부를 가르는 구조를 설명한다
  • 준비 사이클(집중 훈련 → 운영 점검 → 컨디션 관리)을 대회 일정에 맞춰 배치한다
  • 후반전 전략 계산기로 "검증 모드 vs 신규 도전"의 판단을 수치로 내린다
  • 막힌 문제를 기록과 함께 버리는 결단을 팀 규칙으로 집행한다
  • 결과와 무관하게 결과 기록과 팀 회고 자리를 완성한다

2. 배경 지식 — 오늘의 도구와 개념

오늘의 도구 한눈에 보기

구분 내용
언어·환경 파이썬 3(후반전 전략 계산), 팀 채널, 대회 플랫폼, 확정된 운영 문서
오늘의 명령 python step339_endgame.py — 후반전 문제별 집중/버리기 판단
필요한 개념 준비 사이클, 결단의 경제학, 후반전 관리, 결과와 실행의 분리
오늘의 산출물 대회 준비 캘린더 + 후반전 계획 + 대회 로그 + 결과 기록·팀 회고

2-1. 이 무대에서 승부를 가르는 것 — 실력 외 변수

상위권 대회의 점수 판을 보면, 1위부터 5위까지의 격차가 한두 문제입니다. 그 말은 문제를 푸는 실력이 비슷하다는 뜻이고, 따라서 순위를 가르는 것은 실력이 아니라 실력이 점수로 환산되는 과정의 효율입니다.

실력 외 변수는 네 가지입니다. ① 문제 배정 — 누가 어떤 문제를 먼저 잡았는가. ② 정체 관리 — 막힌 문제를 얼마나 빨리 버리고 이동했는가. ③ 후반전 운영 — 마지막 3시간을 검증에 썼는가, 무리한 도전에 썼는가. ④ 컨디션 — 수면·식사·집중력의 상태. 넷 모두 대회 전에 준비할 수 있고, 그래서 오늘 챕터의 전부입니다.

2-2. 준비 사이클 — 대회를 역산해 배치한다

목표 대회가 확정되면 남은 기간을 세 블록으로 나눕니다. 소재 원문의 사이클 그대로입니다.

블록 기간(예시) 하는 일
집중 훈련 대회 4~2주 전 Step 338 방식의 약점 보완 — 최상위권 문제 유형 반복
운영 점검 대회 2~1주 전 교대표·스왑 규칙·막힘 트리의 리허설 — 모의 타임어택 1회
컨디션 관리 대회 1주~당일 신규 학습 중단, 수면 리듬 고정, 장비·환경 최종 점검

마지막 블록의 "신규 학습 중단"이 의외로 어렵습니다. 대회가 가까울수록 "이것만 더 공부하면"이라는 유혹이 커지는데, 이 시기의 신규 학습은 시험 직전 벼락치기처럼 숙련된 동작을 흐립니다. 최상위권 대회의 실력은 당일에 만들어지지 않습니다 — 당일에 드러날 뿐입니다.

2-3. 결단의 경제학 — 버리는 것이 점수를 만든다

소재 원문의 핵심 문장입니다 — "상위권 싸움에서는 막힌 문제를 빨리 버리는 결단이 점수를 만듭니다." 이것이 왜 경제학인지 계산해 봅시다.

정체된 문제에 1시간을 더 쓰는 행위의 비용은 그 1시간이 아니라, 그 시간에 다른 문제에서 얻을 수 있던 기대 점수입니다. 80% 진척된 문제의 남은 20%와, 0%인 새 문제의 첫 50%는 난이도가 다릅니다 — 후반의 20%가 전반의 50%보다 훨씬 비쌉니다. 그래서 "거의 다 풀었으니 조금만 더"가 최상위권 대회에서 가장 비싼 착각입니다.

단, 버리기는 삭제가 아닙니다. Step 328에서 배운 규칙 그대로, 포기할 때는 시도 내역을 전량 저장합니다. 기록 없는 포기만이 손실입니다.

2-4. 후반전 관리 — 마지막 3시간을 미리 설계한다

대회의 마지막 3시간은 피로가 최고조이고 판단력이 최저점인 구간입니다. 이 구간의 전략을 당일의 피로한 뇌에 맡기면 무너집니다 — 그래서 대회 전에 미리 정해 둡니다.

후반전의 기본 구조는 두 갈래입니다. ① 검증 모드 — 푼 문제의 플래그가 전부 제출·인정됐는지 재확인하고, 진척도 높은 문제 하나에만 남은 전력을 집중. ② 신규 도전 모드 — 점수가 순위권에서 크게 밀려 있어서 보수적 운영으로는 역전이 불가능할 때, 고배점 문제에 도박적 착수. 둘 중 무엇이 정답인지는 상황이 정하고, 그 판단을 돕는 것이 3-2의 계산기입니다.

그리고 결과에 대한 자세를 하나 합의해 둡니다 — 결과와 실행의 분리입니다. 이 수준의 대회는 변수가 커서, 최선의 실행이 최선의 결과를 보장하지 않습니다. "최선의 준비와 실행을 했는가"에 예라고 답할 수 있다면, 그 결과는 다음 도전의 출발점일 뿐입니다. 이 합의가 없으면 대회 직후의 팀이 결과 앞에서 흔들립니다.


3. 따라 하기

3-1. 대회 확정과 준비 사이클 배치

목표 대회를 확정하고, 개최일에서 역산해 준비 캘린더를 만듭니다.

준비 캘린더 예시 (화면 예시 — 대회 D일 기준):
D-28 ~ D-14  집중 훈련: 약점 분야 최상위권 문제 하루 1개 + 복기
D-14 ~ D-7   운영 점검: 8시간 모의 타임어택 1회 — 교대표·스왑 규칙 실전 점검
D-7 ~ D-1    컨디션 관리: 신규 학습 중단, 기상·취침 시각 대회 시간대에 고정
D-1          환경 점검: 장비·네트워크·플랫폼 계정·비상 연락망 확인, 일찍 취침

운영 점검 블록의 모의 타임어택은 기술 훈련이 아니라 규칙의 리허설입니다. 교대 인수인계가 실제로 문서대로 되는지, 막힘 트리가 패닉 순간에 작동하는지를 확인하는 자리입니다. 여기서 무너진 규칙은 대회에서도 무너집니다 — 고쳐 두세요.

3-2. 후반전 전략 계산기 — 판단을 수치로

후반전에 "이 문제를 계속 잡고 있을까, 버릴까"를 감으로 정하지 않기 위한 도구입니다. step339_endgame.py로 저장하세요.

# step339_endgame.py — 대회 후반전(마지막 3시간) 전략 계산기
# 입력값은 여러분의 대회 상황으로 교체해서 사용
from dataclasses import dataclass

@dataclass
class Problem:
    name: str
    progress: int      # 0~100, 진척도 추정치
    stuck_hours: float # 정체된 시간
    remaining_flag_steps: int  # 플래그까지 남은 단계(추정)

TEAM_SCORE = 1850
NEXT_RANK_SCORE = 2100   # 바로 위 팀 점수
HOURS_LEFT = 3.0

PROBLEMS = [
    Problem("web-cabinet",   80, 0.5, 1),
    Problem("pwn-kernel_1",  45, 2.0, 3),
    Problem("rev-vm",        20, 1.5, 4),
]

POINT_EST = {"web-cabinet": 400, "pwn-kernel_1": 500, "rev-vm": 350}

print(f"=== 후반전 전략 계산 (남은 시간 {HOURS_LEFT}시간) ===")
print(f"현재 {TEAM_SCORE}점 / 바로 위 팀 {NEXT_RANK_SCORE}점 (격차 {NEXT_RANK_SCORE-TEAM_SCORE}점)\n")

for p in PROBLEMS:
    # 진척도와 정체 시간으로 기대 점수 추정
    momentum = max(0.0, p.progress / 100 - p.stuck_hours * 0.15)
    feasible = p.remaining_flag_steps <= HOURS_LEFT and momentum > 0.3
    verdict = "집중" if feasible else "버리기"
    print(f"{p.name:<14} 진척 {p.progress:>3}%  정체 {p.stuck_hours:>4.1f}h  "
          f"남은 단계 {p.remaining_flag_steps}  추정 {POINT_EST[p.name]}점  -> {verdict}")

print("\n=== 후반전 규칙 (이 챕터의 기본값) ===")
print("1. 30분 정체 문제는 즉시 기록 후 전환 — 기록 없는 포기 금지")
print("2. 남은 1시간은 신규 착수 금지, 푼 문제 플래그 재제출 검증")
print("3. 종료 15분 전 전원 제출 로그·스크린샷 최종 저장")

실행한 실측 출력입니다:

=== 후반전 전략 계산 (남은 시간 3.0시간) ===
현재 1850점 / 바로 위 팀 2100점 (격차 250점)

web-cabinet    진척  80%  정체  0.5h  남은 단계 1  추정 400점  -> 집중
pwn-kernel_1   진척  45%  정체  2.0h  남은 단계 3  추정 500점  -> 버리기
rev-vm         진척  20%  정체  1.5h  남은 단계 4  추정 350점  -> 버리기

=== 후반전 규칙 (이 챕터의 기본값) ===
1. 30분 정체 문제는 즉시 기록 후 전환 — 기록 없는 포기 금지
2. 남은 1시간은 신규 착수 금지, 푼 문제 플래그 재제출 검증
3. 종료 15분 전 전원 제출 로그·스크린샷 최종 저장

읽는 법: 판정 로직의 두 축을 봅니다. ① 남은 단계가 남은 시간 안에 들어오는가 — rev-vm은 남은 단계 4개로 3시간에 안 들어오므로 기각. ② 모멘텀 — 진척도에서 정체 시간의 페널티를 뺀 값입니다. pwn-kernel_1은 진척 45%지만 2시간 정체가 모멘텀을 깎아 기각됩니다. "배점이 높으니까"가 판단에 들어오지 않는 것이 포인트입니다 — 배점은 얻을 수 있을 때만 의미가 있습니다. 계산기는 판정을 대신하는 것이 아니라, 피로한 후반전의 뇌가 "혹시 모르니까"라며 붙들지 못하게 막는 견인 장치입니다.

3-3. 당일 — 확정된 계획의 실행

대회 당일의 운영 골격은 Step 326·328에서 단련된 그대로입니다. 다른 점이 하나 있습니다 — 이 무대에서는 계획을 수정하지 않는 것이 계획입니다.

목표 대회 진행 기록 (화면 예시):
[00:00] 시작. 전 문제 열거 — 18문제. 킥오프 회의 20분, 배정 확정
[01:40] warmup 2문제 회수 (+300). 예선 평균 속도와 동일 — 계획대로
[04:00] web-cabinet 착수. 1시간 차에 인증 우회 — 진척 양호
[06:30] pwn-kernel_1 정체 30분 도달 — 규칙대로 기록 후 스왑
[09:00] 중간 회의 — 3솔브, 예상 궤도 내. 오후 배정 재확인
[15:00] web-cabinet 해결 (+400). 스코어보드 4위 — 3위와 250점 차
[21:00] 후반전 진입 — 계산기 판정: web 잔여 문제 집중, pwn/rev 버리기
[23:00] 검증 모드 — 제출 플래그 6건 전량 재확인, 로그 저장
[24:00] 종료. 최종 4위, 6솔브

읽는 법: 06:30의 스왑이 보여야 합니다 — 정체 30분 도달에 감정 없이 규칙을 집행한 장면. 그리고 21:00의 판정이 사전 합의와 계산기로 이뤄진 장면. 이 기록에 "고민한 흔적"이 적을수록 운영이 잘된 대회입니다. 고민은 대회 전에 다 해 두었어야 하니까요.

3-4. 막힌 문제의 버리기 — 기록과 함께

버리기의 실제 절차입니다. 감정이 개입할 틈을 주지 않는 것이 목표입니다.

버리기 집행 체크리스트 (화면 예시):
[ ] 정체 30분 도달 확인 — 타이머 기준, 감 기준 아님
[ ] 시도 내역 전량 저장: 명령 로그, 스크립트, 막힌 지점 한 줄, 다음 가설 한 줄
[ ] 팀 채널에 선언: "[버리기] pwn-kernel_1 — 기록 완료, 다음 가설: canary leak 우회"
[ ] 다음 문제 착수 — 배정표의 다음 순번으로

채널에 선언하는 이유 — 버리기를 공개해야 팀 전원이 "이 문제는 지금 열려 있지 않다"를 공유하고, 대회 후 재도전할 때 누가 어디까지 갔는지가 문서에 남습니다. 조용히 손 떼는 것은 버리기가 아니라 방치입니다.

3-5. 종료 후 — 결과 기록과 팀 회고

종료 직후, 순위를 보기 전에 기록부터 완성합니다. 그리고 결과와 무관하게 팀 회고 자리를 갖습니다.

결과 기록 양식 (화면 예시):
- 최종 순위 / 득점 / 솔브 수:
- 바로 위 팀과의 격차와 그 문제의 정체:
- 운영 자가 평가: 교대표 준수율, 스왑 규칙 집행 횟수, 후반전 계획 준수 여부
- 컨디션 자가 평가: 수면 계획 준수, 집중력이 무너진 구간
- 다음 대회로 가져갈 것 1개 (단 하나만):

마지막 항목이 중요합니다 — 개선점을 열 개 적는 회고는 아무것도 안 바꿉니다. 이 수준의 회고는 "다음 대회에서 바꿀 단 하나"를 고르는 자리입니다. 그리고 회고와 별개로 회식 자리를 가지세요 — 소재 원문의 문장 그대로, 이 수준까지 함께 온 것 자체가 성취입니다. 결과와 무관하게 그 자리를 건너뛰는 팀은 다음 시즌이 없습니다.


4. 미션과 연습문제

미션 — 목표 대회 완주와 기록의 완성

  1. 목표 대회(국내 메이저 재도전 또는 국제 파이널)를 확정하고 준비 캘린더(3-1)를 작성합니다.
  2. 운영 점검 블록에서 8시간 모의 타임어택을 1회 수행해 교대표·스왑 규칙·막힘 트리를 리허설합니다.
  3. 대회에 완주합니다 — 정체 30분 규칙, 버리기 선언, 후반전 계산기 판정까지 계획대로.
  4. 종료 후 결과 기록 양식(3-5)을 완성합니다 — "다음에 바꿀 단 하나" 포함.
  5. 팀 회고와 회식 자리를 갖고, 그 기록을 팀 문서에 남깁니다.

연습문제

문제 1. 최고 수준 대회에서 순위를 가르는 "실력 외 변수" 네 가지를 들고, 왜 이 무대에서는 실력 차이가 아니라 이 변수들이 승부를 가르는지 설명해 보세요.

문제 2. 준비 사이클의 마지막 블록(컨디션 관리)에서 "신규 학습 중단"을 규칙으로 두는 이유를 설명해 보세요.

문제 3. 3-2 계산기의 판정에서 배점(POINT_EST)이 집중/버리기 판정에 들어가지 않는 이유를, 기회비용의 관점에서 설명해 보세요.

문제 4. "결과와 실행의 분리"가 팀에게 왜 필요한지, 이 합의가 없을 때 대회 직후에 벌어지는 일과 함께 설명해 보세요.


5. 모범 답안과 완료 기준

미션 모범 답안

검증 기준으로 확인하세요.

  1. 캘린더의 역산: 세 블록이 대회일에서 역산해 배치됐고, 컨디션 블록에 신규 학습 중단이 명시됐는가.
  2. 리허설의 증거: 모의 타임어택의 로그가 있고, 그 자리에서 발견된 규칙 결함이 문서에 반영됐는가.
  3. 규칙 집행의 흔적: 대회 로그에 정체 30분 스왑과 버리기 선언이 시간과 함께 남아 있는가.
  4. 후반전의 사전성: 후반전 판정이 당일 즉흥이 아니라 계산기·사전 합의에 근거했는가.
  5. 회고의 완결: 결과 기록에 "다음에 바꿀 단 하나"가 있고, 팀 회고·회식이 결과와 무관하게 열렸는가.

연습문제 해답

문제 1 해답. 실력 외 변수는 문제 배정, 정체 관리, 후반전 운영, 컨디션입니다. 최상위권 대회의 점수판에서 상위 팀 간 격차는 한두 문제인데, 이것은 참가 팀들의 문제 해결 능력이 수렴했다는 뜻입니다. 모두가 풀 수 있는 문제를 풀 때, 순위는 "누가 더 빨리 맞는 문제를 골라 잡았는가", "누가 막힌 문제에 시간을 덜 태웠는가", "누가 마지막 3시간에 실점하지 않았는가"에서 갈립니다. 실력은 대회 당일에 바꿀 수 없지만, 이 네 변수는 전부 사전 준비와 당일 규칙 집행으로 통제됩니다 — 그래서 이 무대의 준비는 기술이 아니라 운영에 배정됩니다.

문제 2 해답. 대회 직전의 신규 학습은 숙련된 동작을 흐립니다. 새 기법은 손에 익기 전까지 실행 속도가 느리고, 대회 중 "새로 배운 것을 써 보고 싶은 충동"은 확정된 전술을 이탈하게 만듭니다. 또한 마지막 주의 학습은 수면을 침범하기 쉬워 컨디션 관리와 직접 충돌합니다. 최상위권 대회의 실력은 당일에 만들어지는 것이 아니라 그동안의 훈련이 드러나는 것이므로, 마지막 주의 과제는 실력의 추가가 아니라 컨디션의 봉인입니다 — 이미 가진 것을 최상의 상태로 꺼내 쓸 조건을 만드는 일입니다.

문제 3 해답. 배점은 "얻을 수 있는 경우에만" 가치를 가집니다. 500점 문제라도 남은 단계가 3시간에 들어오지 않거나 모멘텀이 꺾였다면, 그 문제에 남은 시간을 쓰는 행위의 기대 점수는 0점에 가깝습니다. 그 시간의 진짜 비용은 그 사이에 진척도 높은 문제를 끝내거나, 푼 문제의 플래그를 검증해 실점을 막는 데 쓸 수 있던 가치입니다. 판정에 배점을 넣으면 "고배점이니까 조금만 더"라는 도박 논리가 들어오고, 후반전의 피로한 뇌는 그 논리에 가장 취약합니다. 그래서 계산기는 의도적으로 배점을 판정에서 배제하고 실행 가능성(남은 단계, 모멘텀)만 봅니다 — 배점은 판정이 끝난 뒤, 실행 가능한 후보가 둘 이상일 때의 우선순위에만 쓰는 것이 올바른 위치입니다.

문제 4 해답. 이 수준의 대회는 변수가 커서 최선의 실행이 최선의 결과를 보장하지 않습니다 — 문제 유형의 궁합, 당일 서버 상태, 경쟁 팀의 컨디션까지 통제 밖입니다. 합의가 없으면 팀은 결과로 실행을 소급 평가합니다 — 순위가 낮으면 계획이 틀렸다고 느끼고, 작동했던 규칙까지 버리며, 다음 대회를 불안한 상태로 맞습니다. "최선의 준비와 실행을 했는가"를 평가 기준으로 미리 합의해 두면, 결과는 평가가 아니라 데이터가 됩니다 — 기대에 못 미쳐도 "실행의 어느 지점이 아쉬웠나"를 냉정하게 볼 수 있고, 아쉬운 지점이 없다면 그 결과는 다음 도전의 출발점일 뿐이라는 결론에 흔들림 없이 도달합니다.

완료 기준 체크리스트

  • [ ] 목표 대회를 확정하고 준비 캘린더를 역산으로 작성했다
  • [ ] 컨디션 블록에 신규 학습 중단과 수면 리듬 고정을 명시했다
  • [ ] 8시간 모의 타임어택으로 운영 규칙을 리허설하고 결함을 반영했다
  • [ ] 정체 30분 규칙과 버리기 선언을 대회 로그에 남기며 집행했다
  • [ ] 후반전 판정을 계산기·사전 합의로 내리고 계획대로 실행했다
  • [ ] 결과 기록 양식을 완성하고 "다음에 바꿀 단 하나"를 골랐다
  • [ ] 결과와 무관하게 팀 회고·회식 자리를 가졌다

6. 흔한 실수와 해결

벽 1. 대회 직전 주에 "이 기법만 더" 공부하다 컨디션이 무너졌어요

증상: 대회 전날까지 새 write-up을 파고, 수면이 깨져 당일 오후에 집중력이 붕괴합니다.

원인: 불안을 학습으로 달래는 패턴입니다 — 준비가 부족하다는 감각이 마지막까지 공부를 시킵니다.

해결: 감각이 아니라 캘린더를 따르세요. 3-1의 캘린더에서 D-7 이후의 신규 학습은 규칙 위반입니다. 불안이 올라오면 학습 대신 운영 문서를 다시 읽으세요 — 교대표, 막힘 트리, 버리기 체크리스트. "준비됐다"는 감각은 새 지식에서 오지 않고, 확인된 계획에서 옵니다.

벽 2. dataclass 부분에서 에러가 나요

증상: 스크립트를 실행하면 이런 에러가 뜹니다 (실측 — 파이썬 3.6 이하 환경).

ModuleNotFoundError: No module named 'dataclasses'

원인: dataclasses는 파이썬 3.7부터 표준 라이브러리에 포함됐습니다. 오래된 파이썬에서는 모듈이 없습니다.

해결: 파이썬 버전을 먼저 확인하세요 — python --version. 이 책의 환경(3.12)에서는 그대로 동작합니다. 구버전을 써야 한다면 pip install dataclasses로 백포트를 설치하거나, Problem을 일반 클래스로 바꾸면 됩니다.

벽 3. 계산기가 "버리기"라는데 손이 안 떨어져요 — 거의 다 풀은 것 같아요

증상: 80% 진척 문제인데 정체가 길어져도 "조금만 더"를 반복합니다.

원인: 매몰 비용의 오류입니다 — 이미 쓴 시간이 아까워서 더 씁니다. 그리고 진척도 80%는 추정치일 뿐, 남은 20%에 플래그까지의 진짜 벽이 숨어 있는 경우가 많습니다.

해결: 두 장치를 쓰세요. ① 타이머의 기계적 집행 — 정체 30분 알림이 울리면 판단 없이 기록 후 스왑합니다. "판단 없이"가 핵심입니다. ② 버리기 선언에 "다음 가설"을 의무 기입 — 가설이 손에 쥐어져 있으면 떠나기가 쉽고, 나중에 돌아올 수 있다는 확신이 버리기를 가능하게 합니다. 그리고 기억하세요 — 이 무대에서 "거의 다 푼 문제"를 붙든 시간에 경쟁 팀은 한 문제를 더 냅니다.

벽 4. 목표에 못 미치는 결과가 나와서 팀 분위기가 가라앉았어요

증상: 우승 재도전에서 4위. 회고 자리가 침묵합니다.

원인: 결과로 실행을 소급 평가하는 함정에 팀 전원이 빠진 상태입니다 (문제 4 참조).

해결: 결과 기록 양식(3-5)을 순서대로 채우세요 — 특히 "운영 자가 평가"와 "컨디션 자가 평가"를 먼저. 계획대로 실행됐다는 사실이 숫자로 확인되면 침묵이 풀립니다. 소재 원문의 문장을 팀 채널에 그대로 옮기는 것도 방법입니다 — "중요한 건 최선의 준비와 실행을 했는가이고, 그 답이 예라면 그 결과는 다음 도전의 출발점일 뿐"입니다. 그리고 회식은 미루지 마세요 — 가라앉은 날일수록 그 자리가 필요합니다.

벽 5. 후반전에 "역전 도박"을 하느라 푼 문제의 실점을 놓쳤어요

증상: 마지막 1시간에 고배점 문제에 착수했다가, 이미 푼 문제의 플래그 제출 오류(공백 포함, 대소문자)를 종료 후에 발견합니다.

원인: 후반전 전략을 당일의 피로한 뇌가 정한 것입니다 — 역전 욕구가 검증의 가치를 깎아내립니다.

해결: 후반전 규칙 2번을 기계로 지키세요 — 남은 1시간은 신규 착수 금지, 검증 전용. 이 규칙은 대회 전에 팀 채널에 고정 메시지로 올려 두고, 후반전 진입 시각에 다시 인용합니다. "플래그 재제출 검증"이 회수하는 점수는 종종 새 문제 하나보다 큽니다 — 이미 번 점수를 지키는 것이 후반전의 첫 임무입니다.


7. 정리

오늘의 개념

개념 한 줄 설명
실력 외 변수 문제 배정·정체 관리·후반전 운영·컨디션 — 최상위권의 실제 승부처
준비 사이클 집중 훈련 → 운영 점검 → 컨디션 관리, 대회일에서의 역산 배치
신규 학습 중단 마지막 주의 과제는 실력 추가가 아니라 컨디션 봉인
결단의 경제학 버리기의 비용은 기회비용 — 배점이 아니라 실행 가능성으로 판단
후반전 관리 마지막 3시간의 전략은 대회 전에 미리 설계 — 검증 모드가 기본
결과와 실행의 분리 평가 기준은 순위가 아니라 "최선의 실행을 했는가"

오늘의 도구·명령어

도구·명령 하는 일
python step339_endgame.py 후반전 문제별 집중/버리기 판정과 규칙 출력
준비 캘린더 대회일 역산의 세 블록 배치
버리기 집행 체크리스트 기록 저장 → 채널 선언 → 다음 착수의 무감정 집행
결과 기록 양식 순위·격차·운영/컨디션 자가 평가·다음에 바꿀 단 하나
후반전 규칙 3종 30분 정체 전환 · 마지막 1시간 검증 전용 · 종료 15분 전 최종 저장

명령어보다 중요한 감각

이 무대의 대회는 준비가 끝난 시점에 이미 절반이 결정됩니다. 당일에 하는 것은 계획의 실행뿐이고, 실행의 품질은 규칙을 감정 없이 지키는 훈련의 누적입니다. 정체 30분에 손을 떼는 것, 후반전에 검증을 택하는 것 — 전부 사소해 보이는 결정이지만, 한두 문제 차이의 스코어보드에서는 이 사소함이 전부입니다.

그리고 결과가 목표에 못 미치더라도, 여기까지 온 팀이 봐야 할 것은 순위의 숫자가 아니라 실행의 기록입니다. 계획대로 싸운 대회의 패배는 다음 우승의 부품입니다 — 그 부품은 오늘 여러분이 저장한 로그와 기록 안에 들어 있습니다.


전부 체크되면 Step 339 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.