-- 예전 기록/Codeforces

[ Codeforces ] Codeforces Specialist ( 1400+ Mint ) 후기

rejo 2023. 9. 24. 23:49

 

사실 코드포스 민트 달성 후기를 쓰지 않으려고 했었다. 후기라고 해야할지... 후기라고 말하는게 무색할 정도로 오래 준비한다던가 신경쓰던게 아니고 "어쩌다 보니" 달성한거라, 후기를 쓰는게 맞나 싶기도 했었다.

 

코드포스 민트는 11월의 목표로 잡아두었던 것이었다. 혼자서 "지금 실력으로는 코드포스에서 또 컷 당할거야.. 준비를 좀 오래 해야 해" 라면서 목표를 멀리 잡아뒀었는데, 그걸 콘테스트 두 번으로 단숨에 달성했다는게 너무 신기해서 하루동안은 입꼬리가 내려오지 않았던 것 같다. 후기를 써야 할 지 말 지에 대한 고민은 민트를 달성했다는 기쁜 마음이 너무 쎄서 바로 접어두고 후기를 작성하기로 했다.

 

그레이 수문장

통곡의 벽

2022년 처음 코드포스에 발을 들였을 때, 실력 측정을 제대로 한 기분이였다. 저 당시에는 골드 상위에서 서식하고 있었을 때였을 테지만, 잘 풀면 4솔, 평균 2~3솔 정도, 못 풀면 그 이하 정도 치루다 보니 그레이 이후 레이팅을 넘기는 힘들었고, 잔뜩 마음이 꺾인 나는 코드포스에 관심이 사라지기 시작했다.

 

지금 생각해보면 저 정도 레이팅이 나오는게 당연하다고 생각이 든다. 저 당시에는 아직 골드 상위였음에, BFS DFS 제외하고 다른 태그들에 대해 존재도 모를 정도로 미숙했다. DP, 정수론, 최단거리 알고리즘 등등 코드포스에 자주 나오는 알고리즘에 대해 모르는 상태로 헤딩만 하다 보니 운이 좋으면 B~C 까지 풀 수 있는 실력이었던 것이다.

 

심지어 초반에는 C를 주 언어로 쓰고 있었다. 아직 파이썬을 PS에 사용하는게 익숙하지 않아서일까, 파이썬을 주 언어로 사용하는 지금 시기에 그 때 제출 현황을 보면 아주 눈물이 날 정도다.. 푸는 속도도 현저히 느리니 한 문제를 푸는 데 시간이 오래 걸려 문제를 조금 고민하고 있다 보면 콘테스트가 종료되고 그레이 빔을 맞았다.

 

 

결국 꾸준히 노력하는 것이 길을 보여준다.

코드포스를 안 하게 된 시기가 2022년 10월, 그 때부터 거의 1년이 지나가는 지금 시점까지 많은 일이 있었다. 솔브드 티어는 골드를 뚫고 플레를 넘어 다이아를 달성했고, 그동안 풀었던 많은 문제량이 실력의 공백을 조금씩 채워주었다. 중간중간 바쁜 시기도 있었지만 최대한 백준 문제를 꾸준히 푸는 것에 의의를 두자고 생각했다. 

 

2023년 반까지는 티어를 올리기 위한 문제를 많이 풀었다. 티어작이라고 불리는 행동이기도 하지만, 나에게는 BFS, DFS + DP, 세그먼트 트리 등 높은 티어를 가진 문제들을 접하며 한 문제에 대해 개념을 응용하고 분석하는 능력을 기를 수 있었던 기간이었다. 데이터를 어떻게 먼저 전처리하고 알고리즘을 어떻게 적용해야 하는지, 예외가 나오는 부분은 보통 어디에서 나올지 등 골드 상위부터 백준에서 접한 여러 문제는 나에게 PS 의 문제 스타일을 알려주는 좋은 연습이 되었다.

 

말은 그렇지만 사실 허무한 짓이기도 했다. 개념 하나로 응용만 잘 하면 플래티넘 ~ 다이아 급의 문제가 계속 풀리니 다른 쪽을 대비하는 것은 뒷전으로 두고 한 곳만 파는 것을 멈출 수 없었다. 한 태그를 우직하게 파다 보니, 내가 몰랐던 다른 태그들의 존재 여부를 알게 되었다. 세그먼트 트리에 이분 탐색, 좌표 압축, 스위핑 등등... 세그먼트 트리를 배우기 전에 순서대로 공부했다면 알았어야 할 태그들을 모르니까 조금씩 푸는 과정에 벽이 생기게 된 것이다. 그때부터 나는 한 태그만 우직하게 파는 것보다 여러 태그를 다방면으로 잘 할 줄 아는 것이 진정한 정수임을 깨닫게 되었다. 그제서야 세그먼트 트리 문제를 파먹을 만큼 많이 풀어 놓고나서 여러 태그를 대비하기 위한 준비를 시작했다.

 

2023년 6월 이후로부터는, 여러 태그를 많이 푸는 걸 연습하기 위해 노력했다. 콘테스트에 자주 나오는 유형인 DP, 그리디 조차도 실버부터 어려워했기 때문에, 아예 처음부터 기초를 잡자는 마인드로 단계별 풀이나 태그 풀이를 진행하면서 여러 방면의 실력을 올리려고 노력했다. 티어는 다이아 5로 올릴 만큼 많이 올렸다고 생각하고 기초 다지기에 집중했다. 다이아 5는 거의 백준 종결급 목표로 잡아두었던 거라, 티어에 대한 욕심 없이 기초 문제를 많이 접할 수 있었다.

 

이때부터 DP 기초 문제, 그리디 문제들을 조금씩 풀어가며 실버에도 내가 풀기 어려운 문제가 많음을 자각할 수 있었다. 배워야 할 기초가 많으니 왠지 모르게 재밌다는 생각도 들어 계속해서 열심히 개념을 배우고 스트릭을 채워나갔다. 스터디 그룹에서 진행한 문제 풀이, 랜덤 디펜스, 기초 태그 뿌시기 등등 실력을 기르는 데 도움이 되는 활동을 많이 하면서 점점 기초 실력을 쌓아갔다. 학교를 다니느라, 밀린 일 처리 하느라 바쁜 와중에도 문제를 조금씩 풀려고 노력을 하면서 지냈다. 

 

진짜 초본데요

기초는 계속 다졌지만 코드포스 레이팅은 그레이니 "나는 아직 그레이 실력인 하수야" 가 입에 붙었던 9월 초, 거의 1년만에 코드포스에 복귀하고 Codeforces Round 895 (Div. 3) https://codeforces.com/contest/1872 에 참여하였다. 그레이 수문장이었던 나는 '문제 어려우면 레이팅 많이 안 떨어지게 바로 도망가야지..' 생각으로 Div. 3을 시작했다. 그 결과...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

????????????????
????????????????????????

생전 처음으로 블루 퍼포먼스를 받게 되었다... 처음엔 얼떨결했는데 이후 현실이 되면서 그레이의 벽을 넘지 못했던 나는 바로 그린 ( Pupil ) 로 승급했다. A ~ D 까지는 구현, 수학, 그리디, 정수론 문제들이 등장했어서 어렵지 않게 풀었으나, E 를 푼게 기적이였다. dp 를 이용한 비트마스크 이론 문제였는데... 1년 전에는 몰랐던 지식으로 풀게 되니 엄청 기분이 짜릿했다. 

 

만약 지금까지 계속 높은 티어 문제들을 푸는 데에 치중했더라면, 기초가 부실해서 무너지는 탑처럼 나 또한 그레이에 남아 있었을 것이다. 콘테스트의 초반 문제들에서 세그먼트 트리가 등장하지는 않으니까. 그런데 기초를 연습하고 나서 도전한 콘테스트에서 5솔브를 하다니, 당시에 너무 기뻐서 인스타그램 스토리에도 올려서 자랑했던 기억이 난다.

그리고 2주 뒤, Codeforces Round 898 (Div. 4) https://codeforces.com/contest/1873 에 참여하게 되었다. 저때 당시에 학교 과제가 쏟아지는 날이여서 엄청 힘들었던 때였는데, 도망칠까 고민을 했지만 일단 그래도 Div. 4니까 시도는 해봐야지... 라며 참여하게 되었는데....

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

????????????????????????????????????

난생 처음 받았던 Div. 3 의 블루 퍼포먼스보다 높은 퍼포먼스로 올솔브를 해버렸다.

콘테스트동안 문제를 보며 계속 고민하고, 이거 설마 올 솔브 되나? 되나? 싶은 심정으로 두근거리며 문제를 풀었던 것 같다. 도중에 코피도 터지고, 3틀도 하면서 점점 꺾여가기도 했지만, 마지막에 G를 빨리 떠올린 것이 관건이 되어 종료 6분 전에 올솔브를 하고 콘테스트를 마무리 했다. ( 이후 스터디 그룹에서 하수 아니라며 엄청나게 혼쭐났다... )

 

A ~ D 를 10분만에 다 푼 경험은 처음 해본 것 같다. D 까지 풀고 중간에 퍼포먼스를 확인해봤는데 오렌지 퍼포먼스가 나와서 엄청 놀란 채로 E 번을 시작한 것 같다. ( 그리고 E 번에서 말림 ) A ~ D는 쉬운 구현이었지만 나머지 문제는 정렬 구현, 그리디, 이분 탐색, 응용 DFS 등등 쉽지 않은 문제가 나왔는데, 그동안 진행했던 연습이 결실이 된 것인지 떠오른 솔루션을 토대로 구현하니 AC를 받을 수 있었다. 진짜 초보인 나인데 어떻게 이럴 수 있지...

 

엄청 기뻤고 엄청 감동했다. 민트 가지고 호들갑일 수도 있겠지만, 그동안 코드포스 그레이도 넘는게 힘들어서 그린이라도 찍어보자.. 라는 목표를 가지고 있었는데, 그걸 단번에 넘고 민트에 도달할 수 있었던 나 자신한테 크게 감동했던 것 같다. 열심히 해온 PS로 2번만에 그린에서 민트로 치고 올라가는 좋은 결과를 만들어 냈다는게 아직도 믿기지 않고 행복하다.

 

앞으로...

힘든 과정일 수 있겠지만, 코드포스에서 블루를 찍어보고 싶다. 민트 다음 단계이긴 하지만 내 눈에서는 블루가 엄청 크고 거대한 관문처럼 보인다 ㅎ... 아마 민트에 도달한 지금보다 더 많이 연습하고 배워야 그 이후 콘테스트도 잘 치룰 것이지만, 나 자신이 연습한 만큼의 성과를 잘 낼 수 있다는 것을 보여줬으니 블루까지의 과정도 도전해보려고 한다. 이후에 더 노력해서 남부끄럽지 않은 경쟁적 프로그래머가 되고 싶다는 개인적인 바람이다!