일상/대회 참가 후기

2021 Codejam 1A 간단 후기

stonejjun 2021. 4. 11. 14:48

원래는 codejam 후기를 잘 작성하지는 않지만, 요즘 블로그 글을 잘 안쓰기도 했고,코포를 안한지는 거의 반년이 되어간다. 그래서 cp의 감을 되살리고자 codejam 1A를 했던 후기를 간단하게 작성하려고 한다.

2라운드로 가기 위해서는 3번의 기회 중 한번 만 1500등 안에 들면 된다. 사실 한동안 codeforces도 안치고 cf에 대한 자신감이 많이 하락한 상태여서 보기가 B나 C로 미루려고 했지만, 시험기간이 씨게 겹칠것 같아서 어쩔 수 없이 A에서 통과를 하려고 마음먹었다.

1번 문제를 봤다. 문제를 읽으면서 거의 바로 만점 풀이가 떠올랐고, 그리디 + 구현으로 풀 수 있는 문제라고 생각했다. 근데 구현이 string을 써야 했고, 케이스도 많이 나누고 예외 처리도 해야될 것 같았다. 1번 구현을 하다가 멘붕이 와서 나머지 문제의 풀이 생각에 영향을 주고 싶지는 않았기 때문에 구현은 보류를 했다.
codejam은 codeforces와 다르게 최종 제출 시간 + 총 틀린 횟수로 페널티를 정하기 때문에 문제를 바로 바로 풀어야 될 이유가 없다.

바로 2번 문제로 넘어갔다. 수학 문제 처럼 보이는 문제. 보자마자 어질어질 했다. 2-3 hidden 이 문제가 아니라 아예 떠오르지 않았다. 마침 배가 아파 화장실에 갔는데, 화장실에서도 하나도 생각이 나지 않았다. 결국 정신적 데미지만 입은 채, 조금 급박해진채로 2번문제는 일시적 포기를 했다.

3번 문제를 봤다. 보자마자 ?가 찍혔다. 생각을 1~2분 해보니까 3-3 hidden을 제외한 문제의 풀이를 알 것 같았다. N=2 일때는 그냥 A의 답, A의 정반대, B의 답, B의 정반대의 4가지 중에 최댓값을 고르면 될 것 같았다. 이미 0점인채로 너무 오랜 시간을 보낸 나는 남은 시간중 대부분을 때려 박아도 안될 것 같은 3-3 hidden은 가볍게 포기하고 바로 코딩을 했다. 코딩을 하는 과정에서 testcase 별로 초기화를 하지 않는 실수와 N=1일때를 고려하지 않는 실수를 해서 시간이 늦어졌지만, 대회 시작 약 30분 만에  c를 풀 수 있었다. 그 시점에서 C를 푼 사람은 거의 없었다.

다시 1번문제로 돌아왔다. 이전 수와 비교하여 이미 큰지를 살펴보고, 0을 쭉 붙일지 전 수 +1을 할지 등을 결정해서 바꾸면 간단하게 해결 할 수 있다. 하지만, 문제가 쉬운거지 편한 것은 아니었다. 수의 범위 때문에 당연히 string으로 처리를 해야했고, 익숙하지 않았기 때문에 실수로 이어졌다. 그래도 대회 시작 1시간 만에 무난하게 1번문제를 해결 할 수 있었다.

 1,3 번에서 점수를 잘 확보해 놓은 상태로 2번문제를 보니까 생각보다 간단할 거라는 결론이 나왔다. 그냥 재귀를 이용한 brute force, 한동한 구현 능력을 올리기 위해서 풀었던 문제 들 중 많이 보였던 유형이 생각났다. 어짜피 합은 약 500000을 넘지 않을 것이기 때문에 잘 비빌 수 있을 것 같았다. 완탐을 하면서 곱이 합을 넘어갈때마다 커트를 해주는 것이 중요한 시간 절약 요소였다. 적당히 짜고 기도했다. 다행히 2-2까지 맞았다. 

이제 선택과 집중을 잘 해야한다. 300등에 박제를 해놨고, hidden을 노리고 제출을 했다가는 등수가 확 밀릴수도 있었다. 2-3이 15점인데 3-1 3-2가 14점인 부분에서 굉장히 불안했지만, 2-3이나 3-3을 푼 사람이 전 세계에 그렇게 많지는 않을 것 같았다. 그래서 그냥 놀았다.

대회가 끝나고 15분이 지났는데 까먹었다. 그리고 확인해보니까 무난한 600등 대였다.

cp를 안하다 보니까 코딩 속도가 굉장히 느려진 것이 확실히 체감이 되었다. 그래도 어느정도 만족할만한 성과를 거두었고, 적당히 자신감을 되찾은 것 같다. 3라운드. 어쩌면 그 이후까지 한 번 가볼 수 있도록 최선을 다해보려고 한다.