본문 바로가기

ps 대회 후기

2025 KAIST 15th ICPC Mock Competition 후기

카이스트 가을대회를 쳤다. Fox is cute 팀으로 쳤다. 팀원은 SongC, serin이다. 이번에는 외부인 팀들이 정말 많이 와서 대회장이 북적거렸다. 고등학생 팀들도 오고 흥미로웠다.

 

내가 JKLM, serin이 중간, SongC가 앞부분을 보기로 했다.

 

0:00 ~ 1:00

누가봐도 무서운 J번을 빠르게 스킵, K번을 (이상한 그래프 카운팅 문제인 줄 알고) 스킵하고 L번을 봤는데 그냥 앳코더 카운팅 문제였다. 팀원들한테 대충 풀릴거 같다고 말하고 풀이 구상에 들어갔다. 그 사이에 팀원들이 A/B를 잡고 풀었다.

0:18, 0:28 (A WA +2)

0:29 (A AC)

0:25 (B AC)

 

L번 구체화를 마치고 구현에 들어갔다. 그런데 생각보다 코드가 꽤 길었고, 예제가 안 돌았다. (예제가 꽤 빡셌다)

예제 디버깅을 하는 사이에 팀원들이 풀이를 많이 냈고, 중간에 SongC의 프린트 디버깅 제안을 받아들이고 키보드에서 나왔다. 내가 키보드를 오래 잡은 탓에 스코어보드의 상위권에서 밀려났다.

 

1:00 ~ 2:30

내가 키보드를 잡는 사이에 요리된 문제들은 무난하게 맞았다. 

1:14 (K AC)

1:24 (C WA +1)

1:31 (C AC)

 

생각보다 나의 L번 코드는 개판이었다. 좌표압축을 엄밀하게 하지 않았고, 이걸 엄밀하게 재정의하는데 시간을 좀 썼다. 경계 처리를 내 생각보다 조금 더 열심히 해야 했다.

L번 무한 디버깅을 하다가 중간에 SongC가 G번의 풀이를 만들었다고 해서 들어봤다. "그냥 백트래킹을 하면 된다"라고 주장을 했는데, 증명이 엄밀하지 않아서 조금 더 생각을 해봤다. 특정 2*2 구역을 제외한 모든 곳을 다 칠한 다음에 브루트 포스를 하는 풀이로 바꿨다. 중간중간 내가 "키보드 좀 빼앗고 L번 구현 고친 다음에 예제 안 돌아서 다시 나오기" 같은 행동들을 해서 시간이 30분 걸리지 않았나 생각해본다.

2:01 (G AC)

 

중간중간 serin이 F번 풀이를 낼 때 무서운 토픽들을 꺼내면서 어렵게 풀려고 했는데, SongC가 키보드를 잡은 틈에 풀이를 간단하게 바꿔왔다. 가볍게 AC

2:12 (F AC)

 

난 지난번 ucpc 본선에서 H번을 잡고 n시간 잡다가 사망한 경험이 있어서, 이번에 L번에서도 비슷하게 될 것을 우려했다. 도중에 식을 완전히 잘못 세운 것을 깨닫고, 몇 번 고친 후에 예제가 나와서 제출했다. 결과는 AC! 디버깅을 얼마나 더 할지 모르는 상황에서 정말 무서웠다.

2:17 (L AC)

 

2:30 ~ 4:00

그 사이에 serin이 H번을 풀었다고 주장하면서 코딩을 했다. WA를 받았다. 풀린 D/E를 놔두고 아무도 안 푼 H번에 박치기하는게 멋있었다.

3:07, 3:09 (H WA +2)

 

다른 팀들 중 I 제출이 좀 있는 것 같아서 I번을 보았다. 생각보다 어렵지 않았다. 한쪽만 정렬을 하면서 다른 쪽의 정렬 순서를 건들이지 않는다는 아이디어만 내면, 나머지는 쉬웠다. 키보드를 잡게 된 시점에 여러 팀들이 I를 맞췄고, 각각 +1~3 페널티를 적립하는 것을 보고 정말 체계적으로 코딩해야겠다고 생각했다. assert문을 덕지덕지 발라가면서 코딩을 했고 결과는 WA였다.

3:30 (I WA +1)

 

assert문에서 걸렸으면 WA가 아니라 RE에서 걸려야 되는데, WA가 나왔다는 것은 10만번의 시행 제한을 넘었을 수 있다는 생각을 하게 만들었다. 만약 시행 제한을 넘긴거면 풀이를 갈아엎어야 했기 때문에 큰일이었다. 100이라는 작은 n 범위에 10만이라는 큰 숫자가 있길래 그냥 출제자가 너그럽게 제한을 준 것이라고 생각하고 크게 시행의 횟수를 신경 안 썼는데, 조금 무서웠다. 그런데 다시 계산해보는데 시행 횟수 이슈는 아닌거 같았다. 좀 더 생각해서 컨테이너에 input을 넣는 순서가 잘못되었다는 결론을 내고 컨테이너에 있는 원소들을 reverse했는데 WA가 나왔다.

3:40 (I WA +2)

 

그냥 print 함수를 지우지 않은 것이라는 것을 깨달았다. 지워서 제출을 하려는 순간, 내가 컨테이너에 있는 원소를 정말 reverse해야 되는지 생각을 했고, 그렇지 않다는 것을 깨달았다. 그냥 print 함수 안 지워서 페널티 2스택을 쌓은 것이다. 직접 예제를 손으로 테스트해봐서 제대로 도는지 확인해보고 AC!

3:46 (I AC)

 

이때 serin이 H번을 조금 고쳤고, 시간초과가 났다. 본격적으로 serin이 엉엉 울기 시작한 시점이다.

3:41, 3:48 (H TLE +4)

 

4:00 ~ 5:00

그 이후로 D, E, J, M이 남았는데, 각각에 대한 인상은 다음과 같았다.

 

D: 관찰 잘 해서 자구에 비비면 될 거 같은데 관찰이 어려워보임

E: 적당한 관찰을 하는 D5처럼 생겼는데 왜인지 안 풀림

J: HLD를 동반하는 레전드 자구 문제로, 지금 잡기 시작하면 시간 내에 못 풂

M: ibm2006이 낸 레전드 투스텝 문제로, 잡기 시작하면 성과를 보지 못하고 엉엉 울게 될 가능성 max

 

그래서 D번과 E번을 번갈아서 봤다. SongC가 D번의 풀이를 냈고, 키보드를 잡았다. 나는 이제 그냥 할일이 없어져버렸다. E, J, M을 보면서 지적 유희를 즐겼다. 중간중간 serin이 H번에 커팅을 했다고 주장을 했지만 TLE를 받아왔다.

3:56, 4:05, 4:06 (H TLE +7)

 

SongC가 촉박하게 D번의 구현을 끝냈지만 예제가 안 나왔다. 그 사이에 serin이 H번에서 로그를 하나 뗐다고 주장을 했고, H번에 올인하기로 했다.

4:58 (H WA +8)

4:59 (H AC)

 

serin이 레전드 버저비터를 해냈다! 채점이 대회 끝나고 돌아서 다들 마무리하는 분위기에서 우리 팀 혼자 환호했다.

 

전체적인 후기

내가 L번을 좀 말아먹어서 페널티적 측면에서 조금 부진했다고 생각한다. 그 이외에 다이아 하위에 속하는 D/E를 풀지 못한 점이 조금 아쉬웠다. 그래도 버저비터도 하고 2등도 했으니 만족한다. icpc때도 좋은 컨디션 유지했으면 좋겠다.