티스토리 뷰


뒤늦게 정리해보는 카카오 코드 페스티벌 후기.


솔직히 수상을 전혀 기대하지 않았는데 수상하고 상금 32만원도 받게 돼서 정말 기분이 좋았던 대회였다. 



온라인 예선

본선 진출자를 겨우 64명 밖에 안 뽑는다고 해서 굉장히 긴장됐었다. 아래는 타임라인별 요약. 무려 6시간동안 진행된 대회라 풀면서 너무 힘들었다.


~ 03:28 Solve A

A번은 그냥 너무 간단한 구현이었어서 쉽게 맞췄다.

~ 14:47 B WA 1

B번도 쉽다고 생각했는데, WA를 받았다. 로직적으론 분명 잘못된 게 없다고 생각했고, 그래서 문제가 될만한 건 실수 오차 밖에 없을 것 같아서 실수 오차를 줄이는 방향으로 이리저리 고민을 했다.

~ 19:38 B WA 2

~ 27:46 B WA 3

몇 번 더 시도를 했음에도 불구하고 계속 WA를 받았고, 여기서 좀 멘탈이 나갔다. 그래서 잠깐 C를 읽고 왔는데, 대충 풀이를 생각하고 구현을 좀 하다가 내가 생각한 풀이에 빈틈이 많다는 걸 깨닫고(+C가 만만치 않은 문제라는 걸 깨닫고) 다시 B로 돌아 왔다.

~ 65:31 B WA 4

~ 69:05 Solve B

그리고 겨우 겨우 4번의 WA 끝에 AC. 최대한 정수로 값을 다 계산해놓고, 맨 마지막에만 나눗셈을 해서 실수 오차를 해결했다. 나중에 C++로는 O(N^3) 로직을 짜도 통과였다는 말을 듣고 굉장히 허탈했었다. 시도라도 한 번 해볼걸...

~ 141:26 D WA 1

B를 풀고 난 다음 C로 넘어가서 다시 좀 구현을 하다가, 이게 케이스 분석을 꽤 잘하고 정리를 잘 해서 구현을 해야 하는 문제라는 걸 깨달았다. 이런 유형의 문제에 내가 약하기도 하고, 자칫 구현이 말렸다간 대회 끝날 때까지 시간만 낭비하고 문제를 제대로 풀지 못할 것 같은 생각이 들어서 2~30분 정도 고민하다가 그냥 포기하고 D로 넘어갔다. 스코어보드를 보니 D를 푼 사람이 더 많았어서 이게 풀만할 것이라고 생각했다.


그리고 좀 고민하다가 D의 풀이를 찾아서, 그걸 구현하고 제출했다. 하지만 WA.

~ 143:21 D WA 2

~ 153:49 Solve D

몇 가지 자잘한 구현상의 실수가 있어서 고치고 AC.

~ 226:56 Solve E

D를 풀고 E 문제를 읽어 봤는데 전혀 감이 안 와서, 다시 C로 잠깐 넘어갔다가 이것도 풀 엄두가 안 나서(ㅋㅋ) 그냥 E에 올인하자 생각하고 열심히 풀이를 생각했다. 좀 더 고민하다 보니 옛날 옛적 성용님께 BOJ 슬랙에서 특강을 들었던 PBS를 적용할 수 있을 것 같다는 생각이 들었다. 그래서 그 유명한 PBS 연습 문제인 유성 문제를 찾아보았고, 다시 보니 트리를 구간으로 펴면 완전 똑같은 문제였다. 그래서 유성 문제 풀이를 살짝 응용해서 풀고 AC.


이 시점에서 스코어보드를 보니 본선 진출에 상당히 안정권이었고, 그래서 C는 그냥 GG하고 놀러갔다. 예상대로 38등으로 본선은 안정적으로 진출했다.


본선

고등학교를 졸업하고 오프라인 개인 대회는 처음이었기 때문에 꽤 떨리기도 했고 기대가 되기도 했고 그랬다. 하지만 리눅스 + 코드블록이라는 굉장히 익숙하지 않은 환경에서 대회를 치뤄야 한다는 점, 내 실력 자체가 상위 31명 안에 들만한 실력은 안 된다는 개인적인 생각 때문에 그냥 재밌게 문제나 풀고 오자는 마음가짐으로 대회에 임했다.


~00:00 시작하기 전

대회 시작전에 코드블록 세팅을 하는데, 어떻게 해도 인덴트 세팅이 내가 원한 형태로 되지 않았다. 다른 건 어떻게 다 수정했는데, 이상하게 중괄호를 열고 엔터를 치면 인덴트가 하나 더 들어간 상태에서 시작하는 세팅이 절대 적용되지 않았다. 중괄호 열고 엔터를 치면 다음 줄이 윗줄에 중괄호 있는 거랑 같은 인덴트에서 시작해서 탭을 꼭 한 번 눌러줘야 했는데, 이게 너무 거슬려서 고치고 싶었지만 결국 실패... 아직도 왜 그랬는지 이해가 안 간다 ㅠㅠ 로컬에서 코드블록 깔아서 세팅 연습해 봤을 땐 잘만 됐었는데...


근데 신기하게도 막상 대회 중에 코딩할 때는 하나도 신경이 안 쓰였다. 그냥 무의식 중에 저절로 탭이 눌러졌다 ㅋㅋ 이것 때문에 말리거나 하진 않아서 정말 다행.

~18:38 A WA 1

A번 부터 상당히 구현히 까다로운 문제였다. 어떻게 어떻게 다 구현해서 제출했는데, WA. 확률 계산을 해야하는데 케이스 중에 4명 중에 2명 뽑는 걸 나도 모르게 0.25로 적어서 한 번 WA.

~ 20:45 Solve A

다행히 그 틀린 부분을 빨리 찾아서 AC.

~ 45:12 B WA 1

B번이 내가 정말 약한 유형의 문제였다. 규칙을 잘 찾고 정리하기 + 적절한 증명이 필요한 문제였는데 대충 생각하고 짰다가 틀렸다. 안 좋은 습관인데 잘 고쳐지질 않는 것 같다.

~ 51:37 B WA 2

~ 57:27 B WA 3

로컬에서 몇 가지 테스트케이스를 더 넣어보고, 수정을 했는데 잘 동작하질 않았다. 여기서 멘탈이 나갔고, B를 더 잡고 있는 건 너무 손해일 것 같아서 바로 C번으로 넘어 갔다.

~ 69:04 C WA 1

 C는 보자마자 풀이가 생각나서, 문제를 먼저 쭉 읽어볼 걸 하는 후회가 강하게 들었다. 그리고 빠르게 코딩해서 짰는데 런타임 에러. 배열 크기를 잘못 잡는 멍청한 실수여서 한숨이 나왔다.

~ 69:24 C WA 2

 배열을 고쳤더니 이번엔 메모리 초과가 나왔다. 코드 상에서 메모리 초과가 나올 부분이 없는 것 같은데 메모리 초과가 나서 엄청 당황했다.

~ 72:34 C WA 3

~ 74:14 C WA 4

 이리저리 메모리를 줄여봤는데 여전히 메모리 초과가 났고.. DFS로 짠 부분에 뭔가 문제가 있는 것 같아서 BFS로 고쳤다.

~ 78:59 Solve C

 BFS로 고치니 바로 AC. 거기에 메모리 사용량도 적었고... 아마 뭔가 DFS로 짰을 때 잡지 못한 버그가 있었는데 BFS로 다시 짜면서 그 부분도 해결됐던 것 같다. 아무튼 C 풀이도 빨리 생각했고 한 번도 WA 안 받을만한 문제였는데 여기서도 WA를 너무 많이 받아서 패널티가 이미 글렀다는 생각을 했다.

~ 84:36 B WA 4

~ 92:36 Solve B

C를 풀고 다시 B로 돌아와서 생각해보니 금방 내 풀이의 잘못된 점을 깨달았다. 그래서 그 잘못된 점을 수정하고, 그 와중에 또 실수 한 번 해서 패널티를 +20하고 B까지 AC. 


그리고 스코어보드를 봤는데, 의외로 3솔브를 한 사람이 많지 않아서 수상권 이내였다. 하지만 내가 패널티가 엄청 높았기 때문에 여기서 한 문제를 더 풀면 100% 수상이고 아니면 100% 수상 못한다라고 보고, 괜히 두 문제 집적거리지말고 그냥 D에 올인하기로 마음먹었다. 어차피 수상 기대를 안 하고 왔는데 수상 가능성이 보인거니 크게 집착할 필요 없다는 생각이 들어서. 결과적으로 좋은 선택이 된 것 같다.

~ 132:26 D WA 1

그리고 생각보다 꽤 빨리 D 풀이를 떠올렸다. 단순한 DFS로 충분히 풀 수 있을 거라는 확신이 들었고, 그래서 코드를 옮긴 다음 로컬에서 여러 가지 테스트 케이스를 만들어서 확인도 해 보았다. 이 과정에서 내가 실수한 부분을 꽤 많이 찾아서 고쳤다. 그리고 이건 진짜 제출하면 맞는다고 생각하고 냈는데, 시간 초과가 떴다 ㅠㅠ

~ 154:19 D WA 2

다시 코드를 쭉 살펴보니, 내가 잘못 구현한 부분이 있어서 실제 시간 복잡도가 내가 생각한 것보다 훨씬 크게 나올 수 있다는 것을 깨달았다. 그래서 그 부분을 고치고, 다시 제출. 하지만 여전히 시간 초과가 나왔다. 그리고 다시 코드를 열심히 살펴봤는데, 이젠 정말 시간 복잡도 상으로는 꼭 통과가 돼야만 할 것 같았고, 시간은 얼마 안 남아서 슬슬 똥줄이 타기 시작했다. 수상을 기대를 안 하긴 했지만 이것만 풀면 수상인게 눈에 보이고 풀이도 다 나왔고 맞아야 할 것 같은데 틀렸습니다도 아니고 시간초과가 나오니 더 마음이 조급해졌다.


 여기서, 구현 편하게 하려고 map을 쓴 부분이 있었는데 이 부분이라도 배열로 고치면 logN은 떨어지니 속도가 꽤 빨라질 수 있겠다 싶어서 우선 이걸 고치자고 마음을 먹었다. 그리고 다 수정해서 로컬에서 최대 크기 랜덤 데이터로 기존에 짰던 거랑 성능을 비교해보니 대충 2배 이상 속도가 빨랐다. 이 시점에서 남은 시간이 10분 남짓했고, 그래서 이거 통과 안되면 진짜 그냥 GG쳐야겠다 생각하고 눈 딱 감고 제출했다.

~ 164:35 Solve D

그리고 다행히 AC. 5초 제한인데 3초가 넘게 나와서 아마 의도한 방법은 아니었을 것 같고, 거기에 덧붙여 내 비효율적인 구현 때문에 엄청 느리게 동작했던 것 같다. 


아무튼 D 통과하고 15분 정도 시간이 남았는데, 아마 수상하지 않을까? 생각을 하면서 스코어보드를 한번 쭉 봤는데, 프리징된 상태에서 D 제출한 사람 엄청 많길래 어쩌면 수상 못할 수도 있겠다 싶어졌다. 그리고 E 문제를 읽어봤는데 풀 만하다 싶으면서 꽤 재밌어 보이는 문제였다. 좀 고민해볼까 하다가 별로 집중이 안돼서, EFGH 다 한 번씩 제출하는 장난질 한 번 한 다음에 그냥 멍 때리고 있다가 대회를 끝마쳤다.



끝나고 보니 예상대로 4솔브 중 압도적인 패널티를 자랑하며 23등으로 수상. 내가 생각했던 것보다 훨씬 좋은 성적이었어서 놀랐다. 정말 내 실력이 그 정도 돼서 상을 받았다기보단 좀 운이 좋았던 것 같고 진짜 전혀 기대를 안하고 가서 마음 편하게 쳤던게 더 도움이 됐던 것 같기도 하다.


아무튼 오프라인 대회 정말 재밌었고 문제도 좋아서 즐거운 대회였다. 오프라인 대회 또 나가고 싶다.

'대회 후기' 카테고리의 다른 글

UCPC 2020 예선 후기  (0) 2020.07.26
2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest Mirror  (1) 2018.12.09
Bubble Cup 11 - Finals (Online Mirror)  (0) 2018.09.23
UCPC 2018 본선 후기  (0) 2018.07.29
UCPC 2018 온라인 예선  (4) 2018.07.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함