Step 324. 국내 대회 예선 출전 — 본선 진출 도전: 총점이 영웅을 이긴다

Step 324. 국내 대회 예선 출전 — 본선 진출 도전: 총점이 영웅을 이긴다

Level 4 — 전문가 | 난이도 ★★★★☆ | 예상 소요 시간 2일 (전략 확정 반나절 + 예선 출전 24시간 + 결과 기록)

전제: Step 298의 기출 분석, Step 300·302의 실전 점검 대회, Step 303의 Level 3 종합 평가를 마쳤습니다. 이 챕터는 훈련이 아니라 출전입니다.

  • 준비물: 등록을 마친 국내 메이저 대회(코드게이트·CCE 등) 예선, 팀 채널(디스코드 등), 공유 문서, 익스플로잇 라이브러리와 치트시트, 그리고 오늘 만드는 문제 우선순위 도구. 대회 장면과 스코어보드는 전부 화면 예시이고, 우선순위 계산 스크립트는 여러분의 데이터로 직접 돌리는 실측 도구입니다.
  • 주의: 예선의 목표는 한 문제의 명예가 아니라 본선 진출(또는 팀 최고 기록)이라는 총점입니다. 챕터 곳곳의 판단이 이 기준 하나로 정리됩니다.
  • ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다. 대회 규정(인원, 외부 협업 금지, 문제 서버 공격 금지)을 시작 전에 읽고 지킵니다.

기출 분석(Step 298)으로 무대의 결을 읽었고, 두 번의 점검 대회(Step 300, 302)로 리허설을 마쳤습니다. 이제 진짜 예선입니다. 24시간 동안 열두 개 안팎의 문제가 열리고, 전국의 팀들이 같은 문제를 동시에 풉니다. 여기서 여러분의 실력은 이미 정해져 있습니다 — 남은 변수는 그 실력이 총점으로 환산되는 비율뿐입니다.

그 환산율을 결정하는 것이 운영입니다. 누가 무엇을 잡는가, 막히면 언제 손을 떼는가, 새벽에 누가 깨어 있는가. 오늘은 그 운영을 규칙과 도구로 만들어 예선에 들어가고, 나와서는 결과를 기록으로 남깁니다.


1. 학습 목표

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

  • 예선 당일 운영의 네 기구(팀 채널, 문제 분배, 시간 관리, 교대 규칙)를 설명하고 실행한다
  • 전 문제 초기 열거를 1시간 안에 끝내고 난이도·분야·담당을 표시한다
  • 점수 효율(기대 점수 ÷ 예상 시간)로 문제 우선순위를 계산해 착수 순서를 정한다
  • 본선 진출 커트라인의 감각(역대 추이와 기대 총점의 비교)을 설명한다
  • 종료 직후 결과 기록(푼 문제/시간, 못 푼 문제 목록, 예상 순위)을 남긴다

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

오늘의 도구 한눈에 보기

구분 내용
언어·환경 파이썬 3(우선순위 계산), 대회 플랫폼, 팀 채널(디스코드), 공유 문서
오늘의 명령 python step324_qual_strategy.py — 문제 우선순위·기대 총점·교대 대상 계산
필요한 개념 점수 효율, 초기 열거, 교대 규칙, 커트라인 감각, 새벽 교대 수면
오늘의 산출물 예선 당일 전략 문서 + 우선순위표 + 대회 로그 + 결과 기록

2-1. 예선의 구조 — 왜 "전 분야 확실한 점수"인가

국내 메이저 대회의 예선은 보통 24시간 온라인 제퍼디(Jeopardy) 형식입니다. 본선 진출 팀을 가려내는 것이 목적이므로 문제 구성이 특이합니다 — 대부분의 팀이 푸는 쉬운 문제, 합불을 가르는 중간 문제, 상위 몇 팀만 여는 어려운 문제.

이 구조에서 커트라인을 결정하는 것은 어려운 문제가 아닙니다. 어려운 문제는 어차피 대부분 못 풀기 때문에, 중간 문제를 누가 더 많이, 더 빨리 먹는가가 순위를 만듭니다. 예선의 본질은 "어려운 한 문제"가 아니라 "전 분야에서 확실한 점수"를 쓸어 담는 팀이 올라가는 구조입니다.

그래서 예선의 적은 "모르는 문제"가 아니라 "풀 수 있는 문제를 놓치는 것"입니다. 담당이 없어서 아무도 열어 보지 않은 forensics 문제, 막힌 pwn에 팀 전원이 붙어 있는 동안 식어 버린 crypto 문제 — 이런 누락이 커트라인 근처의 팀을 떨어뜨립니다. 오늘의 운영 기구는 전부 이 누락을 막는 장치입니다.

2-2. 점수 효율 — 착수 순서를 결정하는 하나의 수식

문제가 동시에 열릴 때 "무엇부터 잡는가"의 답은 감이 아니라 계산입니다. 문제마다 세 숫자를 추정합니다 — 배점, 예상 소요 시간, 우리 팀의 풀이 자신감(0~1). 그러면 순서는 이 식으로 정렬됩니다.

기대 점수 = 배점 x 자신감
점수 효율 = 기대 점수 / 예상 소요 시간
착수 순서 = 점수 효율이 높은 문제부터

자신감이 들어가는 이유가 중요합니다. 300점짜리라도 우리가 풀 확률이 30%면 기대 점수는 90점이고, 100점짜리라도 90%면 90점 — 그런데 후자는 소요 시간이 훨씬 짧습니다. 예선 초반의 목표는 높은 점수판이 아니라 확실한 점수의 신속한 회수입니다. 배점에 눈이 가는 것은 본능이고, 효율을 보는 것은 훈련입니다.

커트라인의 감각도 이 계산 위에 생깁니다. 역대 본선 진출 커트라인(대회 후기와 공개 스코어보드로 추정 가능)이 예를 들어 800점 안팎이었다면, 오늘의 질문은 "우리의 기대 총점이 그 위에 있는가"입니다. 3-3에서 이 계산을 실제로 돌려 봅니다.

2-3. 팀 운영의 네 기구 — 채널, 분배, 시간, 교대

예선 당일의 팀은 작은 조직이고, 조직에는 기구가 필요합니다. Level 3의 열두 대회에서 검증된 네 가지입니다.

기구 규칙 막는 사고
팀 채널 문제별 스레드, 발견은 즉시 공유, 잡담은 별도 채널 같은 시도를 두 사람이 중복
문제 분배 분야별 1차 담당제, 담당이 없는 분야는 시작 전 영입·보강 문제 방치
시간 관리 초기 열거 1시간, 중간 회의 3~4시간 간격, 스코어보드는 회의 때만 스코어보드 중독으로 리듬 붕괴
교대 규칙 2시간 무진전 시 담당 교체 또는 문제 교체, 새벽에는 교대 수면 한 문제에 팀 전체가 소각

네 기구의 공통점은 판단을 규칙으로 바꾼다는 것입니다. 대회 14시간 차의 피로한 머리는 좋은 판단을 못 합니다. 그 시간에도 작동하는 것은 사전에 정해 둔 규칙뿐입니다. "2시간 진전 없으면 교대"가 문서에 있으면, 붙잡고 있고 싶은 자존심을 규칙이 꺼냅니다.

2-4. 새벽 교대 수면 — 24시간 대회의 숨은 승부처

24시간 대회에서 24시간을 깨어 있는 팀은 후반 8시간의 효율이 절반 이하로 떨어집니다. 그런데 예선의 중간 문제는 꼭 그 후반에 풀립니다 — 문제를 오래 곁에 둔 사람에게 열리니까요. 그 "곁에 둔 사람"이 맑은 머리여야 합니다.

그래서 팀원 수만큼 수면 블록을 엇갈리게 배정합니다. 3인 팀이라면 각자 새벽의 서로 다른 4~5시간을 자도록 교대표를 짜고, 자는 동안 자기 문제는 인수인계 문서(지금까지의 시도와 다음 시도 후보)를 스레드에 남깁니다. 수면은 이탈이 아니라 교대 근무의 일부입니다. 이 감각은 48시간짜리 국제 대회(Step 328)에서 생사를 가릅니다 — 국내 예선이 그 연습 무대입니다.


3. 따라 하기

3-1. 대회 정보 확인 — 전략의 입력값 모으기

출전이 확정되면 전략 문서의 첫 장을 대회 정보로 채웁니다. Step 298의 예선 준비 체크리스트가 이미 있으니, 오늘은 거기에 예선 특화 항목 세 개를 더합니다.

예선 정보 확인 (화면 예시):
[ ] 진행 시간 — 정확한 시작·종료 시각 (24시간? 그 이상?)
[ ] 채점 방식 — 정적 배점인가, 풀이 수에 따라 배점이 내려가는 동적 채점인가
[ ] 본선 진출 규모 — 예선 상위 몇 팀이 올라가는가 (10팀? 20팀?)
[ ] 역대 커트라인 — 지난 대회의 진출권 점수 추정 (후기·공개 스코어보드)

왜 채점 방식이 중요한가: 동적 채점이면 빨리 푸는 것 자체가 점수이므로 초기 열거와 속전속결의 가치가 올라갑니다. 정적 채점이면 순서는 오직 효율의 문제입니다. 같은 문제 목록도 채점 방식에 따라 최적의 공략 순서가 달라집니다.

3-2. 당일 전략 문서 — 대회 전에 확정하는 것

대회 시작 전에 팀 회의를 열어 전략 문서 한 장을 확정합니다. Step 300의 리허설에서 검증한 규칙들을 "미래 시제"가 아니라 "확정형"으로 적는 자리입니다.

예선 당일 전략 문서 (화면 예시):
- 시작 후 1시간: 전원이 전 문제를 열거 — 분야/배점/첫인상 난이도/1차 담당을 표에 기록
- 착수 순서: 점수 효율 순 (3-3의 도구 출력을 붙여 넣는다)
- 교대 규칙: 2시간 무진전 시 스레드에 "교대 요청" — 담당 교체 또는 문제 교체
- 회의: 시작 4시간·10시간·16시간·22시간 차에 15분씩, 스코어보드 확인은 회의 때만
- 수면 교대: A 02:00-06:30 / B 00:00-04:30 / C 04:30-09:00 (인수인계 문서 필수)
- 마감 1시간 전: 미제출 플래그 최종 점검, 풀이 기록 정리

문서의 가치는 내용보다 존재에 있습니다. 대회 중반, 모두가 지치고 한 문제가 안 풀릴 때 "어떻게 할까"를 논의하기 시작하면 그 논의 자체가 점수를 태웁니다. 문서가 있으면 답은 이미 정해져 있습니다.

3-3. 우선순위 계산 — 도구로 착수 순서를 뽑는다

초기 열거가 끝나면 문제 목록을 스크립트에 넣어 순서를 계산합니다. step324_qual_strategy.py로 저장하세요 — 목록의 각 행은 (문제명, 분야, 배점, 예상 소요 분, 풀이 자신감)입니다.

# step324_qual_strategy.py — 예선 당일 문제 우선순위·커트라인 감각 도구
# PROBLEMS를 팀 데이터로 교체해 사용

# (문제명, 분야, 배점, 예상 소요 분, 풀이 자신감 0~1)
PROBLEMS = [
    ("welcome",     "misc",      50,  10, 1.00),
    ("web-login",   "web",      100,  40, 0.90),
    ("rev-basic",   "rev",      100,  50, 0.70),
    ("crypto-rsa",  "crypto",   150,  60, 0.90),
    ("foren-pcap",  "forensics",150,  70, 0.60),
    ("web-ssti",    "web",      200,  90, 0.80),
    ("pwn-stack",   "pwn",      200,  90, 0.85),
    ("misc-osint",  "misc",     150,  45, 0.85),
    ("rev-packed",  "rev",      250, 150, 0.30),
    ("crypto-aes",  "crypto",   250, 120, 0.40),
    ("pwn-heap",    "pwn",      350, 240, 0.20),
    ("web-chain",   "web",      300, 180, 0.30),
]

print("=== 예선 문제 우선순위 (점수 효율 = 배점 x 자신감 / 예상 시간) ===n")
rows = []
for name, cat, pts, mins, conf in PROBLEMS:
    eff = pts * conf / mins          # 분당 기대 점수
    exp = pts * conf                 # 기대 점수
    rows.append((eff, name, cat, pts, mins, conf, exp))
rows.sort(reverse=True)

total_exp = 0
cum_time = 0
print(f"{'순위':<4}{'문제':<12}{'분야':<10}{'배점':>5}{'예상':>5}{'자신감':>6}{'기대점수':>8}{'누적시간':>8}")
for i, (eff, name, cat, pts, mins, conf, exp) in enumerate(rows, 1):
    total_exp += exp
    cum_time += mins
    h, m = divmod(cum_time, 60)
    print(f"{i:<4}{name:<12}{cat:<10}{pts:>5}{mins:>4}분{conf:>6.0%}{exp:>8.0f}{h:>6}시간 {m:>2}분")

print(f"n기대 총점: {total_exp:.0f}점 / 만점 {sum(p[2] for p in PROBLEMS)}점")
print(f"상위 8문제만 풀 때 기대 점수: {sum(r[6] for r in rows[:8]):.0f}점,"
      f" 소요 {sum(r[4] for r in rows[:8])//60}시간 {sum(r[4] for r in rows[:8])%60}분")

# 교대 규칙 체크: 자신감 0.5 미만인 문제는 '2시간 진전 없으면 교대' 대상
print("n=== 교대 규칙 대상 (자신감 50% 미만 — 2시간 무진전 시 담당 교체) ===")
for _, name, cat, pts, mins, conf, _ in rows:
    if conf < 0.5:
        print(f"  {name} ({cat}, {pts}점) — 예상 {mins}분, 자신감 {conf:.0%}")

위 예시 데이터를 넣고 실행한 실측 출력입니다:

=== 예선 문제 우선순위 (점수 효율 = 배점 x 자신감 / 예상 시간) ===

순위  문제          분야           배점   예상   자신감    기대점수    누적시간
1   welcome     misc         50  10분  100%      50     0시간 10분
2   misc-osint  misc        150  45분   85%     128     0시간 55분
3   web-login   web         100  40분   90%      90     1시간 35분
4   crypto-rsa  crypto      150  60분   90%     135     2시간 35분
5   pwn-stack   pwn         200  90분   85%     170     4시간  5분
6   web-ssti    web         200  90분   80%     160     5시간 35분
7   rev-basic   rev         100  50분   70%      70     6시간 25분
8   foren-pcap  forensics   150  70분   60%      90     7시간 35분
9   crypto-aes  crypto      250 120분   40%     100     9시간 35분
10  web-chain   web         300 180분   30%      90    12시간 35분
11  rev-packed  rev         250 150분   30%      75    15시간  5분
12  pwn-heap    pwn         350 240분   20%      70    19시간  5분

기대 총점: 1228점 / 만점 2250점
상위 8문제만 풀 때 기대 점수: 892점, 소요 7시간 35분

=== 교대 규칙 대상 (자신감 50% 미만 — 2시간 무진전 시 담당 교체) ===
  crypto-aes (crypto, 250점) — 예상 120분, 자신감 40%
  web-chain (web, 300점) — 예상 180분, 자신감 30%
  rev-packed (rev, 250점) — 예상 150분, 자신감 30%
  pwn-heap (pwn, 350점) — 예상 240분, 자신감 20%

읽는 법: 세 가지를 봅니다. ① 순서 — 최고 배점인 pwn-heap(350점)이 꼴찌입니다. 배점이 아니라 효율이 순서를 정한다는 것이 표로 확인됩니다. ② 상위 8문제의 기대 점수 892점, 소요 7시간 35분 — 역대 커트라인이 800점 안팎이라면, 진출권의 점수는 첫 8시간 안에 있습니다. 이 한 줄이 예선 운영의 총설입니다: 첫 8시간을 완벽하게 운영하는 것이 골든타임이고, 나머지 16시간은 9~12위 문제에서 커트라인 위의 안전 마진을 쌓는 시간입니다. ③ 교대 규칙 대상 4건 — 자신감 50% 미만의 문제는 시작부터 "2시간 타이머를 걸고 들어가는 문제"로 표시해 둡니다.

3-4. 예선 진행 — 화면 예시로 보는 24시간

실제 예선의 하루를 시간대별로 재구성한 화면 예시입니다. 여러분의 대회는 다르게 흘러가겠지만, 기구가 작동하는 결은 같습니다.

[10:00] 대회 시작. 전원 열거 모드 — 각자 분야의 문제를 열어 표에 기록
[10:45] 열거 완료 (12문제). 스크립트 실행, 우선순위표를 팀 채널에 고정
[11:00] welcome, misc-osint, web-login 순으로 착수 — 담당 3인이 각각
[13:20] welcome·web-login·crypto-rsa 해결 (누적 300점). 스코어보드는 안 봄
[14:00] 1차 회의 15분 — pwn-stack이 예상보다 느림, 계속 진행 판단
[16:05] pwn-stack 해결. foren-pcap 착수 — 자신감 60%, 타이머 2시간 설정
[18:00] 2차 회의 — foren-pcap 진전 없음. 교대 규칙 발동, B에게 인계
[20:40] B가 pcap에서 이상 세션 발견 — 플래그. 교대 규칙의 첫 수확
[00:00] B 수면 시작. C가 야간 근무 — crypto-aes에 도전 (타이머 2시간)
[02:10] crypto-aes 무진전 — 규칙대로 손 떼고 rev-basic으로 전환
[04:30] rev-basic 해결. A 교대 기상, 인수인계 문서 읽고 web-ssti 착수
[08:00] 3차 회의 — 현재 예상 순위 진출권 경계. 남은 4문제 중 web-chain 재검토
[09:00] 마감 1시간 전 — 미제출 플래그 점검, 기록 정리
[10:00] 종료. 결과 기록 시작

읽는 법: 눈여겨볼 것은 교대가 두 번 발동한 지점입니다(18:00, 02:10). 둘 다 "더보면 풀릴 것 같은" 순간이었을 테지만, 규칙이 판단을 대신했습니다. foren-pcap은 교대로 풀렸고, crypto-aes는 못 풀었지만 그 2시간을 다른 문제 회수에 썼습니다. 교대 규칙은 문제를 포기하는 규칙이 아니라 시간을 구조하는 규칙입니다.

3-5. 종료 후 즉시 기록 — 다음 대회의 자본

종료 직후, 피로가 몰려오기 전에 30분을 떼어 결과를 기록합니다. 이 기록이 Step 325(본선 대비)와 Step 327(격차 분석)의 원료입니다.

예선 결과 기록 양식 (화면 예시):
- 최종 점수 / 예상 순위 (공식 발표 전 추정 포함):
- 푼 문제: 문제명, 담당, 착수→해결 시각, 결정적 진전이 일어난 지점
- 못 푼 문제: 문제명, 시도한 것, 막힌 지점, 마지막 가설
- 교대 규칙 발동 내역: 시각, 이유, 결과
- 운영 평가: 잘된 규칙 1개, 무너진 규칙 1개, 다음 대회에 바꿀 것 1개

왜 "즉시"인가: 막힌 지점의 기억은 하루만 지나도 왜곡됩니다. "그냥 몰라서 못 풀었다"로 뭉개지면 그 문제는 영원히 못 푸는 문제가 되고, "CBC bit-flipping 유형을 ECB로 오인"이라고 적히면 그 문제는 특훈 목록의 한 줄이 됩니다. 기록의 해상도가 성장의 해상도입니다.


4. 미션과 연습문제

미션 — 예선 완주와 결과 기록

  1. 대회 정보 확인 목록(3-1)을 우리 대회의 실제 정보로 채우고, 역대 커트라인을 추정해 둡니다.
  2. 대회 시작 전에 당일 전략 문서(3-2)를 팀 회의로 확정합니다 — 착수 순서 규칙, 교대 규칙, 수면 교대표까지 확정형으로.
  3. 초기 열거 후 step324_qual_strategy.pyPROBLEMS를 실제 문제 목록으로 교체해 실행하고, 우선순위표를 팀 채널에 고정합니다.
  4. 24시간을 전략 문서대로 운영합니다 — 교대 규칙의 발동과 수면 교대를 기록으로 남깁니다.
  5. 종료 후 30분 안에 결과 기록 양식(3-5)을 완성하고, 못 푼 문제의 파일과 시도 내역을 전부 저장합니다.

연습문제

문제 1. 예선의 난이도 구조(쉬운/중간/어려운 문제의 배치)에서 커트라인을 실제로 결정하는 것은 어느 층의 문제이며, 그것이 팀 운영에 요구하는 것은 무엇인가요?

문제 2. 점수 효율의 수식에서 ‘자신감’을 곱하는 이유를, 3-3 실측 출력에서 pwn-heap(350점, 꼴찌)과 misc-osint(150점, 2위)의 비교로 설명해 보세요.

문제 3. "2시간 무진전 시 교대" 규칙이 자존심과 충돌하는 순간을 상상해 보세요. 이 규칙이 판단을 대신해야 하는 이유를 대회 중반의 인지 상태와 연결해 설명해 보세요.

문제 4. 3-3 실측 출력에서 "상위 8문제 기대 점수 892점 / 소요 7시간 35분"이라는 결과가 예선 24시간의 시간 배분 전략에 주는 함의를 설명해 보세요.


5. 모범 답안과 완료 기준

미션 모범 답안

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

  1. 정보의 완결성: 진행 시간·채점 방식·진출 규모·커트라인 추정의 네 칸이 채워져 있는가 — 특히 동적/정적 채점 구분이 착수 순서 전략에 반영됐는가.
  2. 전략 문서의 확정성: 모든 규칙이 "~하기로 한다"가 아니라 "~한다"로 적혀 있는가. 수면 교대표에 실제 시각이 있는가.
  3. 우선순위표의 실전 적용: 스크립트 출력이 팀 채널에 고정됐고, 실제 착수 순서가 그 표를 따른 흔적(로그의 시각 순서)이 있는가.
  4. 교대의 기록: 교대 규칙이 발동된 사례가 시각·이유·결과와 함께 기록됐는가 — 한 번도 발동되지 않았다면, 정말 모든 문제가 순조로웠는지 점검해 볼 것.
  5. 결과 기록의 해상도: 못 푼 문제마다 "막힌 지점"과 "마지막 가설"이 한 문장 이상으로 적혀 있는가.

연습문제 해답

문제 1 해답. 커트라인을 결정하는 것은 중간 층 문제입니다. 쉬운 문제는 진출권 팀이라면 누구나 풀고, 어려운 문제는 어차피 대부분이 못 풀어 변별력이 없기 때문입니다. 그래서 팀 운영에 요구되는 것은 ① 중간 문제를 빠짐없이 착수하는 전 분야 커버(담당 공백 제거)와 ② 각 중간 문제에서의 소요 시간 단축(점수 효율)입니다. 어려운 문제에 팀 화력이 소각되지 않도록 하는 교대 규칙은 이 요구의 안전장치입니다.

문제 2 해답. 배점은 확정된 값이 아니라 "풀었을 때"의 값이기 때문에, 풀 확률을 곱해 기대값으로 바꿔야 비교가 성립합니다. 실측에서 pwn-heap은 배점 350점이지만 자신감 20%라 기대 점수 70점, 예상 240분이 필요합니다. 반면 misc-osint는 배점 150점이지만 자신감 85%로 기대 128점에 45분이면 됩니다. 분당 기대 점수로 환산하면 격차는 더 벌어집니다 — 배점의 2.3배가 효율의 역전 앞에서는 의미가 없습니다. 예선 초반의 목표는 높은 배점의 명예가 아니라 확실한 점수의 신속한 회수이므로, 자신감은 수식의 핵심 변수입니다.

문제 3 해답. "조금만 더 하면 풀릴 것 같다"는 감각은 근거 있는 판단이 아니라 감정인 경우가 많습니다 — 특히 대회 10시간이 넘어가면 피로와 투입 시간에 대한 미련(매몰 비용)이 판단을 오염시킵니다. 교대 규칙은 맑은 머리의 시점에 정해 둔 판단을 피로한 시점에 집행하는 장치입니다. 또한 교대는 포기가 아니라 시선의 교체입니다 — 새 담당자는 내가 당연하게 여겨 건너뛴 전제를 다시 봅니다. 3-4 화면 예시의 foren-pcap이 교대 뒤 2시간 40분 만에 풀린 것이 그 증거입니다.

문제 4 해답. 진출권의 점수가 전체 시간의 3분의 1(첫 8시간) 안에서 만들어진다는 뜻이므로, 전략의 무게추가 초반으로 이동해야 합니다. 구체적으로 ① 시작 전 컨디션을 최상으로 맞추고(전날 밤샘 금지), ② 첫 8시간에는 스코어보드·잡담 등 비생산 활동을 최소화하며, ③ 이 구간의 문제들은 반드시 성공해야 하므로 자신감이 검증된 유형 위주로 배치합니다. 반대로 후반 16시간은 안전 마진 구간입니다 — 9~12순위 문제와 새벽 교대 수면이 여기 배치되고, 여유가 생기기 때문에 이 시점에야 어려운 문제에 대한 도전이 합리화됩니다.

완료 기준 체크리스트

  • [ ] 대회 정보(시간·채점 방식·진출 규모·커트라인 추정)를 확인해 문서화했다
  • [ ] 당일 전략 문서를 대회 전 팀 회의에서 확정했다
  • [ ] 초기 열거 1시간 안에 전 문제의 분야·난이도·담당을 표시했다
  • [ ] 우선순위 스크립트를 실제 문제 목록으로 실행하고 착수 순서에 적용했다
  • [ ] 교대 규칙(2시간)과 수면 교대를 실제로 운영하고 기록했다
  • [ ] 예선을 완주하고 본선 진출(또는 팀 최고 기록)을 확인했다
  • [ ] 종료 후 30분 안에 결과 기록을 완성했다
  • [ ] 못 푼 문제의 파일·시도 내역·막힌 지점을 전부 저장했다

6. 흔한 실수와 해결

벽 1. 스크립트를 실행했더니 한글이 깨져요

증상: 윈도우에서 실행했는데 출력의 한글이 깨집니다.

=== 삁꼫잌 訝쀍큐  슬꼫뀡꼮  ===

원인: 파일은 UTF-8로 저장했는데 터미널 코드 페이지가 CP949(한글 윈도우 기본값)일 때 발생합니다 (실측).

해결: 실행 전에 chcp 65001로 코드 페이지를 UTF-8로 바꾸거나, PowerShell이라면 $OutputEncoding = [Text.Encoding]::UTF8을 설정하세요. 근본적으로는 출력을 파일로 받아(python step324_qual_strategy.py > result.txt) 편집기로 여는 방법이 확실합니다. 팀 채널에 붙여 넣을 텍스트라면 인코딩이 깨진 상태로 공유되는 사고도 막을 수 있습니다.

벽 2. 자신감 수치를 어떻게 매기는지 모르겠어요 — 그냥 느낌인데요

증상: PROBLEMS의 자신감 열이 근거 없는 숫자가 됩니다.

원인: 정상입니다 — 자신감은 처음엔 주관적 추정입니다. 문제는 추정 자체가 아니라 근거의 부재입니다.

해결: 자신감의 근거를 기록으로 만드세요. Step 298의 기출 분석과 Step 295~297의 대회 로그에 "이 유형을 최근 N번 중 몇 번, 평균 몇 분에 풀었는가"가 있습니다 — 그 숫자가 자신감입니다. 최근 5번 중 4번 해결한 유형이면 0.8. 데이터가 없는 유형은 0.3 이하로 보수적으로 잡는 것이 안전합니다 — 자신감의 과대평가는 우선순위표 전체를 오염시키니까요. 대회가 끝나면 추정치와 실제를 비교해 다음 추정을 교정합니다.

벽 3. 초기 열거가 1시간을 넘어가요

증상: 모든 문제를 "조금씩 풀어 보느라" 열거가 두 시간, 세 시간으로 늘어집니다.

원인: 열거와 풀이의 경계가 무너진 것입니다. 열거의 목적은 문제를 읽는 것이지 푸는 것이 아닙니다.

해결: 열거 단계에서 허용되는 행동을 정하세요 — 문제 설명 정독, 첨부 파일 목록 확인, 분야와 배점 기록, 첫인상 난이도 한 줄, 1차 담당 지정. "입구가 보이는 문제"는 착수 순서 1순위 후보로 표시만 하고 넘어갑니다. 한 문제당 5분이 상한선입니다. 그래도 넘어가면 문제 수가 많은 대회이니 열거 자체를 분야별 분담으로 바꾸세요 — 전원이 전 문제를 볼 필요는 없고, 각 분야 담당이 열거해 표를 공유하면 됩니다.

벽 4. 새벽에 깨어 있는 사람이 아무도 없어요

증상: 수면 교대표가 있었는데 새벽 4시경 팀 전원이 잠들어, 그 시간에 진전이 멈췄습니다.

원인: 교대표가 "자는 시간"만 정하고 "깨어 있는 책임"을 정하지 않았기 때문입니다.

해결: 교대표를 수면 중심이 아니라 근무 중심으로 다시 쓰세요 — "각 시간대에 누가 책임자인가"가 1차 열이고, 수면은 그 여백입니다. 그리고 근무 교대 시 인수인계 문서(진행 중인 문제, 다음 시도 후보)를 의무화하세요 — 문서 없는 수면은 이탈이고, 문서 있는 수면은 근무의 이동입니다. 3인 미만의 소수 팀이라면 새벽 구간을 아예 포기하고 "22시 취침·6시 기상"으로 전원의 리듬을 맞추는 것이 무리한 교대보다 낫습니다.

벽 5. 예선에서 떨어졌어요 — 이 챕터의 의미가 무너진 것 같아요

증상: 본선 진출 실패. 팀의 사기가 가라앉습니다.

원인: 진출은 확률의 영역입니다 — 같은 실력으로도 커트라인 근처에서는 갈립니다.

해결: 완료 기준을 다시 읽으세요 — "본선 진출(또는 팀 최고 기록)"입니다. 그리고 결과 기록(3-5)의 마지막 칸, "운영 평가"를 보세요. 규칙이 작동했고 기록이 남았다면 이 대회는 실패가 아니라 데이터입니다 — 어느 문제에서 점수가 샜는지, 추정과 실제가 얼마나 어긋났는지가 손에 있습니다. Step 325의 재현 훈련은 진출 여부와 무관하게 진행됩니다. 예선의 못 푼 문제 목록은 본선 팀만의 자산이 아니라, 기록한 모든 팀의 자산입니다.


7. 정리

오늘의 개념

개념 한 줄 설명
예선의 구조 쉬운/중간/어려운 3층 — 커트라인은 중간 층의 회수율이 결정
점수 효율 기대 점수(배점 x 자신감) ÷ 예상 시간 — 착수 순서의 유일한 기준
초기 열거 1시간 안에 전 문제의 분야·난이도·담당 표시 — 누락 방지 장치
교대 규칙 2시간 무진전 시 담당·문제 교체 — 시간을 구조하는 규칙
수면 교대 수면이 아니라 근무 책임을 배정하는 표 — 인수인계 문서가 핵심
커트라인 감각 역대 추이와 기대 총점의 비교 — "진출 점수는 첫 8시간에 있다"

오늘의 도구·명령어

도구·명령 하는 일
python step324_qual_strategy.py 문제 우선순위·기대 총점·교대 대상 계산
당일 전략 문서 착수 순서·교대·회의·수면 규칙의 확정형 한 장
문제별 스레드 발견의 즉시 공유와 중복 시도 방지
결과 기록 양식 푼/못 푼 문제, 막힌 지점, 운영 평가 — 다음 Step의 원료
인수인계 문서 수면을 이탈이 아닌 근무 이동으로 바꾸는 장치

명령어보다 중요한 감각

예선은 실력의 시험이 아니라 환산율의 시험입니다. Level 3의 열두 대회가 실력을 만들었다면, 오늘의 운영 기구는 그 실력이 총점으로 새어 나가는 구멍을 막습니다. 배점이 아니라 효율을 보는 눈, 자존심이 아니라 규칙을 따르는 손, 24시간을 버티는 것이 아니라 분배하는 표 — 이 세 가지가 예선의 실력입니다.

그리고 결과가 어떠든, 종료 30분 뒤의 기록까지가 예선입니다. 진출했다면 그 기록이 본선 대비(Step 325)의 출발점이고, 아쉬웠다면 다음 시즌의 설계도입니다. 점수는 대회가 끝나면 사라지지만, 기록은 팀에 남습니다.


전부 체크되면 Step 324 완료입니다.