구글 코드잼 2015가 끝났다. R2 치고 나서 결과를 안 올렸었는데 R3랑 같이 최종 결산하면서 한꺼번에 올리기로 했다.
R2
A
A는 격자 밖으로 나가는 발판들을 전부 센 뒤, 조건대로 처리할 수 없는 발판이 있는지를 확인하는 단순한 탐색 문제였다.
16:33 AC
D
A를 풀고 나서, B와 C를 읽기는 했다. 둘 다 조금씩 끄적여 봤지만 전혀 풀이가 떠오르지 않았고, D는 풀이는 잘 떠오르지 않았지만 문제가 내 취향이고 배점도 높아서 D를 풀기로 했다. D는 가로 시작과 끝이 이어지는 원통 형태의 평면에서 각 칸에 숫자를 써 상하좌우 인접한 칸에 그 숫자가 딱 그 개수만큼 있도록 만들 수 있는 가짓수를 세는 문제였다.(2를 썼다면 상하좌우에 2가 두 개 있어야 함)
바로 감이 오는 건 없었지만 작은 숫자에 대해 백트래킹을 구해 규칙성을 관찰했고, 포함배제를 이용해 패턴을 겹치지 않게 잘 세어주면 된다. 빠트린 패턴이 있어서 두 번 WA를 받았다.
2:26:27 AC
결산
B는 각 수도꼭지의 온도와 단위 시간당 물의 양이 주어질 때, 원하는 만큼의 물을 원하는 온도로 맞추기 위해 필요한 최소 시간을 묻는 문제였다. 2차원 벡터를 합해 원하는 벡터를 만드는 형태의 문제로 변환해서 풀 수 있다고 한다. C는 두 개의 언어 사이에 공통되도록 사용되는 단어를 세는 문제였는데 Flow 문제라고 한다. 둘 다 풀이를 듣고 나니 내가 잘 못 푸는 유형이 맞았다. 대회 끝나고 나서 연습하긴 할텐데 대회 때 넘긴 건 잘한 선택이었다고 생각한다.
304위로 마무리했고 티셔츠와 함께 R3 진출권을 얻었다.
R3
B
A 풀이를 깊게 생각하지 않고 이렇게 짜면 되려나 싶어서 짰는데, 완전히 잘못된 방향의 접근이었다는 것을 거의 다 짰을 때쯤 되서 깨달았다. 일단은 지금 고치기에는 너무 멀리 왔다고 판단되어 A를 넘기고 B부터 풀었다. B는 문제 읽고 나서 바로 그리디 알고리즘을 떠올렸고, 코드도 금방 짤 수 있었다.
두 번 WA를 받았는데 한 번은 음수 modular가 음수가 나온다는 사실 때문이었고 다른 한 번은 offset 계산을 하지 않아서였다. 두 문제를 고치고 나서 맞을 수 있었다.
1:23:42 AC
A
B를 풀고 나서 다시 A를 잡았다. 새로 떠올린 A 풀이는 정확히 증명하진 않았지만 Sliding Window 기법으로 이라고 생각한 풀이를 짰다. 초기화 부분에서 빠트린 게 있어서 찾느라 한참 걸렸고, 대회 마감 1분 30초 정도를 앞두고 틀린 부분을 찾을 수 있었다. 데이터를 넣고 돌리는데 이상하게 오래 걸리는 느낌이 들었지만 다행히 시간 내에 답이 다 나왔다. 대회 끝나고 나서 다시 생각해보니 최악의 경우 이 걸리는 풀이였다. 문제에서 데이터를 직접 입력하지 않고 선형합동생성기로 생성하기 때문에 문제 없이 돌아갔던 것 같다.
2:29:40 AC
결산
끝나기 직전에 겨우 A, B를 풀었기 때문에 등수가 높지 않을 것으로 예상했는데 163위라는 생각보다 높은 등수로 마무리했다. C, E는 읽어보지 못했고 D는 읽어봤는데 시간을 주면 풀 수 있을 것 같은 문제라고 느꼈다. A를 풀고 나서 대회가 바로 종료되었기 때문에 건드려 볼 시간이 없었다. 예상대로 onsite는 진출하지 못했지만(전세계에서 25명 뽑는다) 생각보다 좋은 결과를 얻었다고 생각한다.
종합 후기
이번 대회에서 가장 보람찼던 건 ‘말리지 않았다’는 점이다. 고등학교 때부터 대회만 있었다 하면 자꾸 사소한 실수를 못 찾고 계속 붙잡고 있다가 망하는 경우가 많았다. 특히 대회가 중요하면 중요할수록 심리적 압박감 때문에 이런 현상이 심해졌다. KOI도 세 번 은상만 받고 끝났고, 계절학교 때는 그렇게 잘 하다가도 선발고사만 보면 매 번 기대 이하의 성적을 거두곤 했다. 하지만 이번 코드잼에서는 실수가 있더라도 긴장하지 않고 차근차근 찾아내 결국 다 해결할 수 있었다. 내 실력이면 이 정도는 풀어야 한다고 느꼈던 문제들은 다 풀었고, 시간을 더 주면 풀 수 있을 것 같은데 못 풀었던 문제들이 좀 있었다. R3까지 와 보는 건 처음인데 느리지만 꾸준히 성장하고 있다는 것을 느낄 수 있었고, 앞으로도 성장할 여지가 많이 남아 있다는 것을 느낀 의미 있는 대회였다.