Google Hashcode 2022 예선 후기

마지막 수정 시각: 2022-02-25 16:08:43

ainta, tlwpdus, koosaga 님과 함께 팀으로 Google Hashcode 2022에 참가했다. 팀원 분들이 워낙 잘하시는 분들이다 보니 시작 전부터 좀 부담감이 있었다. 2020년에 참가할 때도 혼자 너무 잘하는 사람들 사이에 낀 것 같아서 압박을 느꼈는데 비슷한 느낌이었다. 아무튼 대충 1인분은 못해도 발목은 잡지 말자는 느낌으로 할 수 있는 것들만 열심히 하자고 생각했다. 다행히도, 예선을 전체 23등으로 여유롭게 통과하고 월드 파이널에 진출하면서 두 번째로 해시코드 월드 파이널에 진출하게 됐다.

아래는 대충 대회 진행에 따른 후기.

시작 전

모일만한 장소가 마땅치 않아서 고민하다가, 내가 지금 살고 있는 집이 그나마 어떻게 낑기면 4명이서 대회를 참가할 만한 크기라 집에서 모여서 치기로 했다. 어떻게 방에 세팅을 해놓고 보니 좀 비좁긴 한데 그래도 4명이서 앉아서 할 수는 있겠다 하고 있었는데, tlwpdus님이 최근에 접촉하신 분이 코로나 양성 반응이 뜨는 바람에 tlwpdus님은 온라인으로 참여하고 나머지 세명만 모여서 진행하게 됐다. 이것 때문에 좀 원활히 의사소통을 이루지 못한 부분이 있는 것 같아서 아쉬웠다.

시작 직후

먼저 문제를 쭉 읽고, 각자 적당히 역할을 나누어서 진행했다. ainta님은 입력, 출력 및 점수 평가, 전략 작성을 할 수 있는 전반적인 프로그램 템플릿 코드를 짰고, 나는 그 사이에 최대한 간단한 형태의 그리디 알고리즘을 생각해서 구현하기 시작했다. koosaga님은 데이터를 살펴보고 다른 좀 더 좋은 접근 방법이 있는지 고민하고, tlwpdus님은 데이터 시각화를 통해 각 데이터들이 가지고 있는 분포와 특성에 대해 분석했다.

~ 2 hour

한 시간쯤 지나고, 내가 아주 간단한 형태의 그리디를 작성해서 제출했다. B,C,D,E,F 전부 돌려서 제출해봤더니 총점 178만점 정도가 나왔고, 제출 직후에 등수가 10등 언저리까지 뛰어서 오 페이스가 나쁘지 않은데? 하는 생각을 했다. 그리고 이 시점에서부터 내가 짠 그리디 코드를 다른 분들이 넘겨 받아서 여러가지 조건이나 전략같은 걸 개선할 수 있는 부분이 있는지 찾고 테스트해보기 시작.

나는 내가 짠 그리디에서 점수가 잘 나오지 않은 C,D,F 데이터를 살펴보다가 그 중에 D가 비교적 접근하기 쉬워보여서 D에만 먹힐만한 다른 전략을 고민해봤다.

그리고 1시 30분쯤 D를 6만점 -> 13만점으로 올리는 전략을 하나 짰고 그걸 제출. 그리고 1시간 40분쯤 지난 시점에 tlwpdus님이 내가 짠 그리디에서 정렬 조건 등을 손봐서 전체적인 점수를 올렸다. 이 시점에서 총점은 210만점 가량. 등수는 50등에서 60등 대를 왔다갔다 하고 있었던 걸로 기억한다.

그리고 2시 언저리 즈음에 koosaga님이 내가 짠 그리디 코드에서 설명을 듣고 전략을 개선한 코드를 이용해서 또 한 번 점수를 전반적으로 끌어올렸다. 이때 점수가 ~300만점 가량. 등수는 잘 기억 안나는데 30등에서 40등 사이였던 거 같다.

~ 3 hour

그러고 2시 30분 시점 즈음까지 큰 개선이 없다가, tlwpdus님이 C번에서 이분 매칭을 이용한 전략을 이용해서 점수를 8만점 가량에서 23만점으로 많이 올렸다. 그렇게 해서 점수를 310만점 정도를 확보. 그 외에는 크게 진전이 없었고, 프리징 시점에서 등수는 70등대였던 걸로 기억한다. 한참 진전이 없다보니 통과하기가 힘들겠다는 생각이 들었다. 나는 그동안 여러 테스트 케이스를 뒤지면서 각 테스트케이스별 성질이 뭔지 좀 더 생각해보고, 몇가지 그리디 전략을 시도해보기도 하고 했는데 그다지 성공적이지 못했다.

~ 4 hour

그리고 프리징 직후 시점 쯤에서, ainta님이 기존에 짰던 그리디 전략에 힐 클라이밍을 붙여서 점수를 끌어올리기 시작했다. 그 와중에 그리디에서 할 수 있는 개선도 중간 중간 논의를 통해 여러가지로 이루어졌고. 3시 30분 언저리까지 ainta님과 koosaga님이 같이 클라이밍과 그리디 개선 등을 통해 전반적인 테스트 케이스 전체에 대해 점수 향상을 많이 이루어냈고, 중간에 tlwpdus님이 C번 테스트 케이스도 좀 더 점수를 올리고 하는 등등의 과정을 통해 점수가 310만점 가량에서 369만점 가량으로 확 뛰어올랐다.

그 이후에는 점수를 상대적으로 더 올릴 여지가 있어보이는 D번 테스트 케이스와 F번 테스트 케이스를 어떻게 하면 개선할 수 있을까 이것저것 얘기를 나누면서 고민을 했지만 결국 점수를 더 올리지는 못하고 그대로 대회가 마무리됐다. 스코어보드를 보면서 대충 프리징 전 기준으로 4등쯤인데, 이정도면 아슬아슬하게 통과할 가능성이 있지 않을까? 하는 이야기를 했고 등수를 까고보니 23등으로 통과해서 기분 좋게 헤어졌다. 하지만 23등부터 통과 컷 까지 점수가 10만점 정도밖에 차이가 안나는데 한 두가지만 못 했어도 그대로 탈락이었던 셈이라, 등수 상으로 보면 여유가 있어보이지만 실제로는 상당히 아슬아슬했다 싶기도 하다. F번이 뭔가 운좋게 73만점이 나왔는데(다시 돌려보니 계속 61만점 언저리가 나옴), 이게 73만점이 나오지 않았으면 아슬아슬하게 탈락할만한 상황이었으니.

소감

올해도 역시나 별로 한 것 없이 버스만 탔지만, 그래도 뭐 발목을 잡진 않은 것 같아서 다행이다 싶었다. 알고리즘적인 접근이나 실질적인 구현, 점수 향상등은 다른분들이 훨씬 잘하니 데이터 성질 파악하고 전달하고 좀 더 다양한 접근법 시도하는 거에 촛점을 맞춰야겠다고 생각했는데, 그런 방면으로 집중해서 이것저것 시도했지만 막상 점수에 그다지 기여를 하진 못한 것 같아서 좀 아쉽다. 더 잘 할 수 있을만한 부분이 많이 있었던 것 같은데 그냥 반쯤 묻어간 듯. 어쨌건 또 팀 잘 만나서 실력에 과분한 월드 파이널에 두 번씩이나 참가하게 됐다. 2020년에는 파이널에서 영 죽을 쒔는데 올해는 파이널을 좀 더 잘 칠 수 있었으면 좋겠다. 어쨌든 정말 오랜만에 대회를 참가했는데 기분 좋게 잘 마무리한 것 같다. 이제 좀 있으면 슬슬 이런 저런 대회들 열릴 시즌인데 공부좀 해야지 싶기도 하고...