원래 대회 하나 끝낼 때마다 후기를 쓰려고 했는데 딱히 쓸만한 성과가 나오지 않았기도 했고, 한동안 바빴다보니 이번에 몰아서 쓰게 됐다. 모든 대회를 다 쓸까 하다가 그나마 성격 비슷한 것들끼리 모아서 2편으로 나눴다. 학부 때는 주로 알고리즘 대회 위주로 나갔다보니 CTF를 제대로 나가본 적은 올해가 처음이지만 그걸 감안해도 아쉬움이 많이 남는 경험이었다.
TL;DR : 전세계 단위에서 한 자리 등수(8등) 찍어봄
그동안 킥스타트는 굳이 후기를 안 썼지만 이번에 역대급 성과를 낸 김에 글로 남겨본다.
예전에도 10~20등 사이의 성적을 낸 적은 있었지만 사이트가 리뉴얼된 후 참가자가 급증하면서1 한동안 100등 바깥으로 밀려났었다. 재작년 코포 접은 이후로 PS 문제풀이를 자주 하진 않더라도 실력체크 겸 코드잼/해커컵/킥스타트 정도는 계속 해보자는 생각에 꾸준히 참가했고, 이번 킥스타트에서는 마침 상성이 잘 맞는(?) 문제들을 만나 8등이라는 좋은 성적을 거둘 수 있었다.
8월의 반이 지나서야 쓰는 2021년도 첫글. 올해도 코드잼은 했고(티셔츠 배송은 아직 안 옴), 다음달이면 SCPC 본선도 있긴 하지만 올해 글이 너무 없는거같아서 일단 하나 써보기로 했다.
어차피 군대에서 여는 대회다보니 뭘 얼마나 공개 가능한지 몰라서 문제에 대한 세부 내용이나 그런건 어차피 안 나온다. 그냥 군에서 이런 대회를 했고, 부대 인원들의 배려로 좋은 경험을 했다는걸 기록으로 남기고 싶어서 쓰는 의미없는 글이다.
지난 코드잼, 해커컵 이후로도 출전한 대회는 몇 있었지만 문제 유출 방지규정이나 다른 사정(대회 종료 직후의 귀찮음이라던가), 혹은 딱히 별도의 글로 쓸만한 성과가 아니었다는 이유로 따로 후기를 쓰진 않았다. 그러다보니 시간이 꽤 지나 굳이 각각을 별도의 글로 쪼개기도 애매해졌고, 대회 후기글로 블로그를 도배할 생각도 없어 이번 기회에 한번 몰아서 정리해봤다.
TL;DR : 이번엔 티셔츠 받음
2019년 해커컵에 이어 올해도 2020년도 페이스북 해커컵 대회가 열렸다. 이번에도 Round 2에서 늦잠을 자면서 Round 3은 달성하지 못했지만1 티셔츠까지는 받을 수 있었다. 구글 코드잼은 작년에 티셔츠를 받았지만 해커컵은 이번이 첫 티셔츠여서 그런지 나름 만족스럽다.
그동안 해커컵에서의 제일 큰 불만은 small / large가 없어서 조금이라도 실수하면 돌이킬 수가 없다라는 점이었는데, 이번에는 validate step이 나와서 이런 점이 조금은 완화됐다. 코드포스의 pretest 느낌으로 validate_input.txt을 제공하고, validate_output.txt를 제출하면 이에 대한 채점결과를 알려주는 시스템이 추가되면서 “그래도 바보같은 코딩실수는 안했구나"라는 확인을 할 수 있었다.
TL;DR : 올해도 티셔츠 받음
지난주 토요일 2020년 코드잼을 마쳤다. 사실 대회에 대한 설명이나 기본적인 소개는 작년에 거의 똑같은 글을 썼어서 이번엔 별로 할 말이 많지는 않다.
작년에 이어 이번에도 티셔츠를 받을 수 있는 Round 3까지 진출에 성공했다. 작년 티셔츠는 L사이즈로 신청했는데, 한국이랑 미국 옷의 기준이 다른건지 티셔츠 끝이 거의 허벅지까지 내려와 밖에서 입고 다니지는 못했다.
TL;DR : 아무래도 페이스북 티셔츠와는 연이 없는 모양이다(…)
2018년 해커컵에 이어 2019년도 페이스북 해커컵 대회가 열렸다. 이번에는 지난번같은 실수 없이 티셔츠, 운이 좋다면 Round 3까지 진출하는 걸 목표로 삼았지만 결국 달성하지 못했다. 일요일 새벽 2시에 열리는 Round 2를 위해 토요일 저녁에 미리 잠들고, 알람까지 맞춰놨지만 눈을 뜨니 2시 23분이었고 급하게 노트북을 켰지만 이미 대회 시작에서 30분이 지난 상황이었다.
TL;DR : 코드잼 티셔츠 받음
2019년 코드잼 본 대회를 치렀다. 몇 번 글을 썼던 Kickstart와는 달리 1년에 1번밖에 열리지 않는 대회이고, 작년엔 훈련소에 있느라 참가를 못 해서인지 조금은 긴장된 마음이었다. 대학 시절 내내 코드잼, 해커컵을 통틀어 티셔츠와는 인연이 없었기에 이번에야말로 하나 받아내겠다는 생각을 했다.
구글 코드잼(Google Code Jam)은 이름에서처럼 구글에서 주최하는 코딩대회로 Qualification Round와 온사이트 World Final을 포함해 총 5단계로 이루어진다. World Final은 전 세계를 통틀어 상위 25명밖에 나갈 수 없어 기대조차 안했고(…) 그 이전 단계인 Round 3(세계 상위 1000명)까지를 목표로 삼았다.
지난 Round A에 이어 리뉴얼된 킥스타트에서 치르는 두번째 대회였다. 다행히 지난번과 같은 서버 문제는 없었지만 생각처럼 문제가 잘 풀리지는 않았다. A번을 제출하고 나니 딱히 풀이가 떠오르는 문제가 없어 결국 B, C 모두 Small까지만 통과할 수 있었다. 결과는 최종 115등으로 전체 문제는 여기에서 볼 수 있다.
Problem A. Building Palindromes 문자열이 주어지면 주어진 문자열의 l…r 구간에 포함된 글자들로 팰린드롬을 만들 수 있는지 판단해야 한다. 구간 [l, r]에 속한 글자들만으로 팰린드롬을 만들기 위해서는 홀수 번 등장하는 알파벳이 최대 하나여야 한다는 사실에 유의하면, 각 알파벳 등장 횟수의 prefix sum을 이용해 각 쿼리를 \(O(26)\)에 처리할 수 있다. 첫 제출에서 초기화에 쓴 fill 함수의 범위를 잘못 잡았다는 걸 깨달아 대회 도중 다시 제출했다. [[source](https://github.com/nyan101/algorithm_snippet/blob/master/CodeJam/Kickstart 2019 Round B/A.cpp)]
코드잼이 새로운 시스템으로 바뀌었다. 사실 메인 코드잼에선 작년에 도입된 시스템이 올해 킥스타트까지 적용된 거라고 하는데 작년 코드잼은 국방부 전직퀘스트를 해야 했어서 개인적인 사정으로 참가를 못했으니 이번이 새로운 시스템을 경험하는 첫 대회였다.
결론부터 말하면 다소 삐걱거리는 출발이었다. 시작 직후 한동안 문제 로딩이 안 되면서 몇 분 후에야 문제를 볼 수 있었고, 제출에서도 다소의 딜레이가 있었다. 거기에 더해 대회 막판에는 아예 제출버튼을 눌러도 코드 제출이 이루어지지 않아서 결국 끝까지 제출하지 못한 상태로 대회가 끝났다. 나름 지난 몇 차례의 킥스타트에서 꾸준히 10~20등 정도의 성적을 내다가 이번에 299등이라는 숫자를 보니 조금 억울하긴 하다(…)