UCPC2024는 출전 못할 줄 알았다. 극적으로 디코에서 팀원을 구해서 신청하게 되었다.
그래서 최종 팀원은 @rustiebeats, @ychangseok과 함께 나가게 되었다. 팀명 후보로는
"팀 이름 후보 드릴테니 이중에 정해주세요", "); DROP TABLE Teams;--", "어디갔어다", "1.팀 이름 후보 드릴테니 이중에 정해주세요 2. ); DROP TABLE Teams;-- 3. 어디갔어다" 정도를 제시했는데 "); DROP TABLE Teams;--"가 채택되었다.
')', ';' 등이 사용할 수 없는 문자여서 강제 리젝당했고 결국 가-힣ㄱ-ㅎㅏ-ㅣa-zA-Z0-9-_가 팀명이 되었다.
너무 흔한 팀명을 써서인가 결국 "정규식 팀"이 세팀이나 만들어지는 불상사가 생겼다...
팀 연습부터 대회까지 @rustiebeats님이 ABCD, 내가 EFGH, @ychangseok님이 나머지 문제를 먼저 읽는 방향으로 문제풀이를 했다. 예선의 경우 A가 가장 쉬운 문제가 나오기 때문에 @rustiebeats님이 A번을 빨리 구현하고 스타트하게 되었다.
주로 @rustiebeats님이 구현이 까다로운 문제를 맡아주셨고 @ychangseok님은 내가 구현하다가 틀린 코드 리딩과 반례찾기를 해주셨고 내가 아이디어를 내고 구현을 팀원한테 던지고 도망가는 역할을 맡았다. 개인적으로 스스로 직관력이 좋은 편이라고 생각하는데 직관에만 의존하는 나머지 에지케이스를 못보고 넘어가는 경우가 아주 많아서 상당히 도움이 되어주셨다.
예선에서는 @ychangseok님이 HIJK를 읽어주셔서 나는 맨 처음에 EFG까지 읽었다.
A (00:01) @rustiebeats님이 그냥 풀어주셨다. 여전히 무슨 문제인지 읽어보지도 않았다.
C (00:02) @rustiebeats님이 A를 그새 다 풀고 C가 스택이라고 하고 넘어갔다. 이게 뒤에서 크게 작용하는데...
G,H(00:03) EF를 읽고 당장 풀 문제는 아니다 싶어서 G로 넘어왔는데 쉽게 풀리겠다는 직감이 들어서 풀이 스케치를 시작했다. @ychangseok님이 구현을 시작하셨다.
G,H(00:05) G의 솔루션이 나왔고 H가 WA를 받았다. 이후 팀원 두 분이서 H를 계속 고민해주셨다.
E (00:19) G만 잡고있어서 지루했던건지 E를 갑자기 잡는다고 했다. 결국 1분도 안돼서 다시 G를 구현하러 감
G(00:27) 2번의 RE 끝에 AC를 받았다. DSU 프리셋과 빠른 타자속도만 있었으면 퍼솔도 노려볼만하지 않았나 하는 생각도 들었다. RE 사유는 100만 크기의 배열을 잡으려고 했으나 10만이라 쳐서...
E (00:29) E를 다시 고민하러 왔다. @rustiebeats님이랑 같이 고민을 하다가
E,C,D(00:31) @rustiebeats님이 솔루션을 내주셨다. 고전적인 dp/bfs에는 나보다 훨씬 식견이 높으신듯. 구현을 맡기고 C와 D를 읽으러 갔다. 여전히 E 푸는데 토의도 같이 했다.
D,J(00:39) D와 J의 풀이가 거의 동시에 나왔다. D는 내가, J는 @ychangseok님이 풀이를 냈다. 하지만 둘다 틀렸다.
E(00:49) E의 구현이 끝나고 AC를 받았다. 이때 상당히 가능성을 본 느낌을 받았으나... ...
J (00:55) 2WA를 받았다는 소식을 들었다. 그리고 세명 다 J로 모였다.
D(01:07) D를 WA받았다. 그냥 WA가 아니고 로직을 깨는 반례를 맞았다. 여기서 포기.
J(01:18) @ychangseok님이 짝수번째만 뒤집는 발상을 해주셨는데 내가 이해를 못하고 그냥 묵살해버렸다...
C(01:20) J만 잡고있어서는 답이 안나올 것 같아서 C와 번갈아 가면서 봤다. C는 @rustiebeats님이, J는 @ychangseok님이, 나는 두개를 번갈아가면서 봤다.
C(01:30) C의 대략적인 솔루션을 제시했다. 정답 알고리즘의 명세를 @rustiebeats님한테 던지고 나는 예제를 손으로 테스트해봤다. 이쯤에서인가 @ychangseok님이 D를 구현시작하셨다. 세그트리를 비벼먹은거같은데 잘 모르겠다.
J(01:42) 불현듯 든 생각이 정답을 만들었다. 괄호 문자열이라는 생각을 하고 나서 계속 구현하던 @ychangseok님이 아닌 내가 구현을 새로 해서 AC를 받았다. 32비트정수만으로 짜서 1WA를 추가로 더 받긴 했다.
C(02:21) C를 구현시작했다.
C(02:34) C 구현을 마치고 WA를 받았다.
D(02:35) @ychangseok님이 구현을 마치고 AC를 받았다. C를 구현하는 나를 제외하고 H로 모였다.
C(02:46) C를 AC했다. 정말 정신없이 마무리했던가 대회가 끝난 뒤 왜 못풀었을까 하고 업솔빙을 시도함...
마지막까지 H를 붙잡고 있었지만 최종 스코어보드는 6솔브 51등으로 마무리했다. 사실 여기서 H를 풀었어야하는데 케이스워크 능력이 좀 부족하다고 느끼게 되었다.
그리고 결국 본선에 가게되었다. LG의 넓은 대관과 회장님의 넓은 아량으로 낮춰진 컷에 겨우 들어서 예선을 통과했다고 들었다. 감사합니다 ㅠㅠ
연습 중에도 ychangseok님께 구현을 많이 떠넘긴 감이 있는 것 같은데 본 대회 중에도 열심히 코드를 짜주셨다...
최종 본선 49등 5솔브로 마무리했다. (2등 올랐다!)
A(+182) 처음부터 고민을 좀 했던 문제였다. O면 +여야한다는건 퍼스트 솔브 이전에 깨달았지만 X일때 판정하는 법에서 off by one같은데서 좀 많이 고민했다.
B(x) 제법 고민을 했던 문제인데 다이어그램 그리는걸 실패해서 포기
C(+239) rustiebeats님과 ychangseok님이 금방 구현해내신 문제. 처음에 이상한 구현문제라서 패스했는데 갑자기 rustiebeats님이 "아니 이거 개쉬운데"하고 금방 구현해내셨다. 이거 처음에 잡았으면 퍼솔도 먹고 패널티도 많이 줄었을 듯. 두분이 뚝딱 풀어주셔서 L번에 매진해서 고민할 수 있었고 해설 공개때까지 문제를 읽어보지도 못하고 AC당했다.
D(+25) 팀 내 첫 솔브 문제이다. 사실 문제 지문은 다 안읽었고 rustiebeat님이 문제를 빨리 해석해서 요약본을 주신 것만 읽고 바로 풀었다. 최대한 균등하게 나눠주면 되는 문제였고 연습때 쌓인 업보인지 나보고 구현해 달라는 요구를 하셨다... 결국 생 라이브로 짜긴 함.
E(+298) 맨 처음 읽은 문제인데 처음에는 그냥 넘기고 다시 돌아와서 봤을 때는 연속된 1과 2로 둘러싸인 빈칸을 잘 처리해주면 된다는 것이었다. 150분즈음에 답을 얻었지만 확신없음+구현이슈때문에 뒤로 미뤄뒀다. 결국 나 아니면 상대가 먹어야 한다는게 대칭 포인트였는데 엄밀한 증명에는 실패하고 PBA를 시도했다.
J(x) HLD 아이디어는 문제를 보자마자 캐치했지만 HLD를 짤 줄 몰라서 시도도 못한 문제. 하지만 HLD가 정해가 아니라는것에 1차 충격, 하지만 HLD로 푼 팀이 대부분이고 정해대로 푼 팀이 한 팀밖에 없었다는 것에 2차 충격
L(-1) 이걸 풀었어야 하는데 실패했다. 이분 매칭에 대한 이해 없이 그냥 무지성으로 플로우를 흘리는 코드를 외우기만 했어서 벌어진 참사라고 생각한다. 아이디어 자체는 작은 정점부터 플로우를 흘리면 된다는걸 알았지만 코드를 짜는법을 몰라서 AC를 받지 못했다. 이분매칭 공부다시할것
M(+290) 다른 문제는 잘 모르겠지만 이 문제는 오류가 있다. +290분이 아니라 +297분에 AC를 받았기 때문. 종료 직전에 버저비터를 눌렀다고 생각했지만 특별상 조건인 마지막 AC를 받지 못했다. 많이 아쉬울 따름.
문제 자체는 +30분 이전에 다이어그램은 혼자 머리속으로 그려보긴 했으나 풀이 방향을 완전히 다른 방향으로 잡아서 실패. rustiebeats님이 중간에 캐치해서 마지막의 마지막에 AC를 받았다. 대회가 끝나고 "산을 그리세요"를 얼마나 들은건지 잘 모르겠다.
끝나고는 참가자 몇 분과 대회 후원자분 하고 뒷풀이를 가졌다. 오래 하지 않은 것으로 들었는데 집가는 열차 시간 때문에 중간에 나오게 되었다.
집가는 SRT경부선에 탄 시점은 휴대폰이 1%남았던 시점... 하마터면 지하철에서 못내릴뻔
후기
1. 플래티넘 랜덤 디펜스는 상당히 중요하고 실력 향상에 도움이 된다.
2. 구현력을 키워야함.
3. 보조배터리를 잘 챙기자