일상/대회 참가 후기

UCPC 2021 본선 후기

stonejjun 2021. 8. 19. 02:05

 예선 대회에 대한 이야기는 https://stonejjun.tistory.com/185에서 찾아볼 수 있다.

 시점은 SCPC가 끝나고 조언을 받고, 랜플디를 시작하면서 내가 딱 바뀌려고 시작하는 시점이다. 즉, 내 능력치와 자신감이 바닥에 떨어져 있는 시점에서 대회가 진행되게 되었다. 오히려 그만큼 편한 마음을 가졌을지도 모른다. 이번에는 모여서 대회를 하기로 했기 때문에 미리 모여서 Ryute와 든든~~한 국밥 한그릇 하고 스터디 카페 룸으로 모였다. 

 대회가 시작되었고, 나는 IJKL을 읽었다. I를 읽자마자 메모리 크기를 보고 머리가 어질어질했고, J는 보고 N범위를 보고 머리가 어질어질 해졌으며, L은 고개가 갸웃했고, K는 웃음밖에 안나왔다.

 내가 K를 보자마자 떠오른 생각은 Combinational game Theory의 Cold game. (스포를 하자면 나는 K를 풀었고, 그 풀이는 이 글에서 볼 수 있다.) 나는 이 이론을 활용해서 루비 4 짜리 이 문제를 만들어 semi-game cup에 출제했다. 따라서 나는 이 이론을 알고 있었고, 그 문제를 푼 사람 수를 생각하면, 나 말고 아는 사람은 7명 이하. 즉, 내 생각에 K를 풀 사람은 7팀이 안될 것이라고 생각했다. 그래서 기대와 환희를 가지고 문제를 풀기 시작했다.

 그렇게 K에 온 신경을 쏟았기 때문에 둘이 어떻게 진행되고 있었는지 잘 모른다. 스코어보드를 보고 많이 풀린 것들을 잡아서 풀고 있었다. 그렇게 가장 많이 풀렸던 H,D,A를 klimmek과 ryute가 풀어 내었다.

H : AC (Ryute, 00:20) D : AC (klimmek, 01:02) A : AC (Ryute, 01:16)

 그리고 내가 J를 Ryute에게 추천했고, 바로 meet in the meedle이라는 것을 알아챘다. 그 사이에 klimmek은 F를 자료구조로 비비고 있었다. 나는 K에서 정신이 나가고 있었다. 어떤 케이스가 일반적인 상황, 즉 코딩의 방향성을 잡아주는데, 그 케이스를 빼먹고 생각을 하고 있었기 때문에 수많은 세부 케이스를 case work 하는 방향으로 문제를 풀고 있었다. 이 부분이 내 약점인 '풀이를 완성 시키는 능력' '정확한 코딩 능력' 과 맞물려서 엄청난 시간 소비를 하고 있었다. 

 대회 시작 3시간이 되가는 시점... 나는 K를 틀렸고, 디버깅을 열심히 했음에도 틀렸다. klimmek의 F는 시간초과가 나고 있었다. Ryute는 J 디버깅을 하다가 결국 갈아엎고 새로 코딩을 짜기 시작했다. 단 3솔. 절망의 연속. 그래도 다행인 것은, 다시 짠 Ryute의 코드가 AC를 맞았다는 것. 그리고 내가 K의 그 핵심 케이스를 관찰해냈다는 것.

J : AC (Ryute, 02:58)

 나는 K를 잡고 싶었지만, Ryute의 주장으로 E를 보던 둘에 합류해서 E를 잡기 시작했다. E는 사람별로 편차가 굉장히 심한 문제였다고 평가 받는데, 나에게는 잘 맞는 문제였다. 관찰을 몇 가지 빠르게 해낼 수 있었고, 이를 바탕으로 풀이도 어렵지 않게 만들어 낼 수 있었다. 관찰한 내용을 계속 설명한 상태에서 진행했기 때문에, 풀이 방향에 대한 인지는 모두가 된 상태였다. 하지만, 이를 어떻게 마무리 짓고 구현 할지에 대한 방안을 제시하지는 못했기 때문에 이 부분을 klimmek에게 맡기게 되었다.

 여기서 좀 더 고민을 하니까 K가 거의 나왔다. 하지만, 재귀를 써야하는 상황이었고 내가 짜놓은 케이스 워크 중 일부분으로 핵심 케이스를 추가하려고 했기 때문에 구현이 굉장히 막막해졌다. 남은 시간은 약 1시간 30분 정도. 내 구현 실력으로 K를 구현해낼 수 있다는 확답을 주기가 어려웠다.
 나는 Ryute에게 내 풀이를 듣고, 구현을 해 줄 수 있냐는 물음을 했고, Ryute는 별로 좋지 못한 생각이라고 하면서 일단 설명을 듣겠다고는 했다. 
 설명을 하고 나니, Ryute가 짜는 것은 굉장히 꼬일 수 있는 상황이었다. 애초에 내가 문제를 봤고, 내가 풀이를 생각해 놨고, 내가 일부 전처리 코딩을 해놨으면, 내가 코딩을 마무리 하는것이 당연한 것이 아닐까? 문제에 대한 아무런 생각도 안해본 사람에게 나의 풀이를 설명하는 것은 굉장히 어려운 일이다. 즉, 나는 내 코딩 실력에 대한 굉장한 불신 때문에 굉장히 좋지 못한 선택을 해버리고 만 것이다.
 하지만, 다행이도 도움이 되는 점은 있었다. 설명을 하는 과정에서 기존에 짜던 코드를 머릿속에서 지우고, 깔끔하게 구현 방향성이 잡히게 되었다. 설명이 끝나고 K를 버리고 F를 보는 것이 어떨지에 대한 의견도 있었지만, 내가 1시간 안에 무조건 K를 AC 띄워오겠다고 했다. 

 klimmek이 E를 AC 띄우고, 둘은 아마도 F를 보기 시작했던 것으로 기억한다. 내가 처음 짠 K코드가 WA를 받았지만, 페널티를 신경쓰지 말라는 Ryute의 말에 한 번더 제출을 했고, 그 결과 내가 틀린부분을 찾아내 고칠 수 있었다. 그렇게 나도 K에서 AC를 드디어 띄울 수 있었다. 그리고 남은 시간 F를 고민해봤지만, 풀어내지 못했다. 

 E : AC (klimmek, 03:54) K : AC (stonejjun, 04:31)

 결과는 6솔. 6솔중에서 페널티는 많아서 하위권. 6솔중 유일하게 F를 못풀고 그대신 K를 푼 팀이 되었다. F를 풀었다면 10등 정도까지 노려볼만했다. 그래도 21등으로 21등까지 주는 상을 탈 수 있었다.

 

 최악의 상황에서 마주한 최고의 대회 세팅. 계속해서 아쉬움이 남는점은 K에 걸린 시간. 나는 대충 문제 읽기 15분, E도움 15분, 마지막 F 생각30분, 말고서는 4시간 동안 K에 투자를 한 것 같다. 결국 풀어내긴 했고, 나머지 팀원들도 정말 잘해주었기 때문에 이러한 결과가 나올 수 있었지만, 아쉬움은 계속 남는다.
 내가 풀이에 한번에 접근했으면, 2시간만에 풀 수 있었을 것이다. 혹은 내가 정리를 잘하거나 코딩 속도가 빠르기라고 했으면 2시간만에 풀 수 있었을 것이다. 내가 둘 다 가능한 사람이었으면 1시간만에 K를 풀어냈을 것이다. 

  이번 대회에서는 문제 셋에 대한 운이 굉장히 좋았기 때문에 그래도 꽤나 나쁘지 않은 결과를 얻을 수 있었다. ICPC 전까지, 그냥 일반적으로 잘하는 그런 팀원이 되어서 돌아오려고 한다. 2달 동안 정말 열심히 노력하기로 다짐을 하고 있다. 마음을 다잡기 위한 화이팅을 외치며, 2021 UCPC 후기글을 마무리 하려고 한다. 

 

'일상 > 대회 참가 후기' 카테고리의 다른 글

UCPC 2022 본선 후기  (2) 2022.07.25
ICPC 2021 예선 후기  (5) 2021.10.10
UCPC 2021 예선 후기  (0) 2021.08.18
2021 Codejam 1A 간단 후기  (0) 2021.04.11
2020 한국 정보 올림피아드 1차 결과  (4) 2020.09.21