PS/후기

[대회] 2024 홍익대학교 프로그래밍 경진대회 HI-CON 후기

기면이 2024. 11. 16. 21:00

* 대회 다음 날에 개인적으로 쓴 일기를 각색하여 옮겼습니다.

* 각색에 사용한 페페, 고양이 이미지는 디시(dcinside)의 디시콘을 가져왔습니다. 문제가 있다면 댓글 바랍니다.

 

 

백준을 시작할 때부터 프로그래밍 대회를 나가고 싶다는 로망같은 게 있었다.

우리 대학에서는 알고리즘 대회 안 여나~ 노심초사 기다리고 있었는데...

 

상금이 있다구요?!

 

바로 같은 학년 동기 M군을 졸라 같이 신청했다.

사실, 나는 ICPC 같은 3인 팀전 코딩 대회를 떠올리고 같이 신청한건데

생각해보니까 신청할 때 팀 빌딩 양식 따윈 없었다는 걸 흥에 겨워 보지 못했다.

결론적으로 경쟁자 하나만 더 늘린 셈. 코테 나름 치는 친군데...

 

 

 

아무튼 대회 일주일 전 이전 하이콘 문제들을 좀 풀다가

당일날 노트북 들고 출발.

 

대회 시작 전

 

1시 50분, 대회 장소에 아슬아슬하게 도착.

주최 측에서도 사람들이 이렇게나 많을지 예상하지 못했는지

5층 복도는 대기 인원들로 가득차 금요일 밤 홍입 9번 출구를 떠올리게 했다.

 

대충 번호표 받고 2시쯤 입실.

왼쪽에 IDE, 오른쪽에 백준 켜두고, 로그인한 뒤 시작을 기다렸다.

등록이 오래 걸렸는지 2시 15분에 대회 시작.

 

대회 시작

 

대회 링크

https://www.acmicpc.net/contest/view/1355

 

- P.M. 2:15 (180 min)

이전 하이콘 때는 A번 문제가 가장 쉬웠었다.

자연스러운 흐름으로 A번 문제를 확인.

 

 

작년보다 어렵네...?

 

 

앞에 크게 틀어주신 스코어보드를 확인해보니

난 이제 문제 다 읽었는데 3~4명 정도 와다다 풀어냈더라.

 

그래도 어렵지는 않은 문제였던지라,

깡 for문으로 돌려서 풀었다.

 

파이썬으로 string.find 같은 걸 쓰면 더 간단하고 빠르지 않았을까라는 생각도 들지만...

불확실함에 몸을 맡기느니 시간도 많겠다 확실하게 구현하고 넘어갔다.

 

다행히 실수없이 A번 1솔 적립.

 

의미없게 풍선 달아주는 이유는 뭘까 했는데,

스팀 도전과제작 하는 것처럼 모으는 재미가 쏠쏠.

 

- P.M. 2:20 (175 min)

난이도가 A < B < C ... < H 부분 순서를 따르지 않을까하여

다음으로는 B번을 확인했다.

 

(대회 끝나고 다시 보니) 간단한 비트연산 문제였다.

 

N자리 2진수를 두 개 준다. 이를 A, B라 한다.

A에 1이 a개, B에 1이 b개 있을 때 A XOR B의 최댓값을 구하는 문제.

 

포인트는 a + b > N인 경우.

4자리수 2진수에 a=3이고 b=3이라면,

1011, 0111 과 같이 LSB 쪽에 0이 몰리도록 하는 게 포인트다.

 

XOR에 정신팔려서 문제 해석과 구현 헛짓거리에만 10분을 쓰다보니,

 

대충 구현하다가 WA만 1~2번 받고 하기 싫어져서 도망간다.

 

 

- P.M. 2:30 (165 min)

스코어보드를 보니 벌써 C번 첫솔이 나온 상태.

 

다행히 C번은 풀이법이 단박에 보였다.

직사각형의 넓이를 구해 튜플로 저장하고, (크기, 번호) 순대로 정렬한 뒤,

0번 인덱스의 번호, 크기를 출력만 하면 되는 문제. 

 

유물의 양 끝 점은 단순하게 양의 정수인 좌표로 주어졌기에

abs(max(x1, x2) - min(x1, x2)) * abs(max(y1, y2) - min(y1, y2)) 로 넓이 계산.

abs는 붙일 필요 없었을테지만 제한 시간도 넉넉하므로 혹시 몰라 넣어줬다.

 

파이썬에 코드 치는 게 더 오래걸렸던 문제였다.

 

C번 솔브로 2솔 확보 성공!

 

- P.M. 2:50 (145 min)

D번으로 건너가 문제를 확인했다.

 

문제가 그 긴 거 수준으로 길었다 뿐이지 막상 구현은 어렵지 않았다.

1. 문자열 양 끝을 모음이 나올때까지 쳐낸다.

1-1. 모음이 0개면 -1, 1개면 1 출력하고 exit.

2. 모음과 모음 사이 자음 수 n개를 세고, n+1을 저장한다.

3. 모든 모음 사이 자음 수를 셀 때까지 2번을 반복하고 저장한 값을 싹 다 모듈러 신경쓰며 곱해준다.

 

별다른 어려움 없이 A, C, D 총 3솔 확보.

 

- P.M. 3:00 (135 min)

E, F, G, H를 스캔해보니 뭐 하나 쉬운 문제가 없어보인다.

자극받아 빨라진 두뇌 회전 속도로 B번으로 다시 돌아간다.

 

 

깡으로 구현하면 분명 시간 초과걸릴텐데...하고 고민했는데

문제를 다시보니 N의 제한도 10인걸 이제야 확인한다.

 

XOR를 몰라도 그냥 for문 깡으로 돌리기로 한다.

 

문제는 너무 어렵게 생각해서 깡구현조차도 복잡하게 구현해서

a + b > N인 경우 등등 여러 경우의 수에 대해 일일이 구현해야했다.

급해진 나머지, 테스트 케이스들도 실험해보지 않고 제출했다가 WA 잔뜩 적립.

 

 

결국 4회의 WA 끝에 B번을 맞았지만 기쁨보단 슬픔이 컸다.

이유는 후술하겠지만, 가장 아쉬웠던 모먼트.

 

 

- P.M. 3:15 (120 min)

4솔부터는 마음의 여유가 좀 생겼다.

이 쯤 되면 어디 가서 코테 좀 공부해봤습니다 할 수 있지 않나? 라는 생각이 들어서.

 

이제부턴 슬슬 입상권을 가르는 문제들일거라 마음가짐을 다잡고

여유를 두고 천천히 풀이법을 구상하기로 했다.

 

E, F, G, H를 다시 해석하고 이리저리 머리를 굴려보니 E번이 만만해보인다.

 

그러나... E번 해석을 온전히 마치고 바로 든 생각은,

 

E번에 어려운 문제를 낼 리가 없는데...?

문제 순서를 바꿔서 E번에 플레 문제를 내기로 했나?

 

 

분명 저번 하이콘은 마지막 2문제인 G, H 빼면 쉬운 문제였으니,

이번에도 마찬가지로 적어도 E번까지는 억지로 대가리 들이밀어서 풀릴 문제라 판단했다.

그게 먹혀서 다행이지 안 먹혔으면 대회 던지고 엎드려 자고 있었을 것이다.

 

그렇게 열심히 종이 써가며 대가리 굴리기 시작.

 

 

이 쯤에서 주최 측에서 이삭 토스트와 몬스터를 나눠줬다.

내 인생 최고로 맛있었던 이삭 토스트였다.

늦잠 이슈로 점심도 안 먹고 왔던지라 한창 배고팠으니 맛이 2.5배.

 

 

- P.M. 4:30 (45 min)

열심히 풀이법 구상하다가,

메모리가 1GB로 넉넉하니 모든 정보를 저장하면 되지 않을까란 아이디어에서 착안,

종이에 예제를 적고 풀이법을 적어본다.

 

결과는 성공. 바로 구현에 들어가서 5솔을 확보했다.

모듈러 연산에 익숙하지 않아 괜히 WA를 하나 받았지만...

 

 

대회가 1시간 남은 시점에 스코어보드를 얼었다.

이 시점부터 제출을 하면 정답 여부를 본인만 알 수 있고 스코어보드에 공개되지 않는다.

첫 대회 이슈로, 당시에는 이 사실을 몰라서,

사람들이 제출하는 것 족족 스코어보드에 등록되어 순위가 마구마구 바뀌길래

이렇게나 6솔이 많다고...? 역시 세상은 넓고 나는 감자다. 라는 생각이 들었다.

 

- P.M. 4:50 (25 min)

남은 F, G, H를 자세히 들여다보니, H는 이분 매칭인 게 보였다.

다만 내가 이분 매칭을 모르므로 H번은 과감하게 버리기.

 

F번을 풀기로 한다.

사실, 풀어야지! 하고 문제를 푼건 아니고

갑자기 아이디어가 떠올라서 바로 구현에 들어갔다.

 

나중에 출제진 분들의 해설을 들어보니, 내 풀이 방법이 정석은 아닌듯...

스위핑이 뭐에요?

 

아무튼 풀었으니 한 잔해~

6솔 확보했다.

 

 

이 시점에서 스코어보드를 보니 15명 정도가 6솔이었다.

아... 나만 어려운가...? 싶긴 하더라.

 

- P.M. 5:10 (5 min)

조금 아쉬웠던 게,

G번과 H번 둘 모두 풀이법만 생각나고 구현을 하지 못했다.

 

그렇게 H번 막 휘갈기고 바로 제출... 하려 했으나,

제출 버튼을 누르는 순간 5시 15분이 되어버려 채점이 닫혀버렸다.

 

다만 문제 해석을 잘못해서 어차피 WA를 받기는 했을 거다.

 

 

대회 종료

 

대회가 끝나고 대충

동상은 누구까지입니다~ 해설 올려뒀으니 한 번씩 보시고 안녕히 가세요~

... 할 줄 알았는데, 교실 한 쪽으로 모이라고 하더라.

 

스코어보드의 밑 순위부터 천천히 까면서,

프리즈 이후 제출한 게 맞았나, 틀렸나 보는 시간을 가졌는데

한 문제 한 문제 솔브마다 순위가 10~20위씩 뒤바뀌니 혼돈의 도가니가 따로 없었다.

영화 "타짜"의 한 장면을 보는 듯 하기도 했고...

초록색이여? 초록색이야?

 

 

사실 이 쯤에서 내 위로 15명쯤 있었다.

입상권은 7등까지인지라 과감하게 동상은 포기하고 있었는데,

6제출 한 사람들이 줄줄이 4솔로 떨어지는 걸 보고

이거 동상은 무슨 잘하면 금상도 되겠는데? ㅋㅋㅋ

은근히 기대하게 되더라.

 

금상 상금인 30만원으로 모니터나 살까, 행복회로를 돌리고 있었는데,

음... 역시 사람은 차분하며 사려깊고 겸손해야한다.

 

누군가에겐 동상도 값진 승리일테지만, (특히 아다리가 안 맞아 4솔에 그친 M군이라던지. 보고있다면 미안하다 ㅋㅋ)

내게는 너무 아쉬운 결과였다.

6솔 했는데 동상 수문장 된 건 너무한 거 아니요... ㅠㅠ

 

집 오는 길에선 나보다 세 배는 더 억울했을 M군 놀리느라 궁시렁대지는 못했다만

나름 속으로는 왜 이리 됐는지 분노를 삭히며 복기를 하기 시작했다

그리고 이 블로그를 만들고 기록하게 된 이유기도 하다... 다시는 실수하지 않으리!

 

 

 

1. 대회 룰을 제대로 알지 못했다.

 

솔직히 틀리지 않고 정확하게 푸는 게 맞다고 생각하긴 했다.

틀리면 뭐 5분이나 많아봐야 10분 패널티 주겠거니 했는데

엥? 한 번 틀리면 20분씩 추가된다구요?

저는 8번이나 틀렸으니, 160분 추가된 거겠! 우!

 

...알았으면 B번을 꼼꼼히 점검했을 것이다.

아니, 하다못해 F번도 꼼꼼히 구현하고 제출했을 것이다...

이제와선 다 부질없는 핑계가 됐지만.

 

8번의 WA 모두 "점검 안하고 내도 맞겠지~" 하고 대충 냈던거라,

피하려면 전부 피할 수 있었던 WA 였던지라 더 아쉬운 부분이다.

잘하면 금상도 노려볼 수 있었을지도.

 

물론 몇몇 원통한 사연이 있어보이는 스코어도 보이고,

참가자들 모두 꼼꼼히 점검해서 모두가 WA를 안 받은 세계관에서의 나는 은상에 그쳤겠지만

그래도 내가 억울하다는 감정 하나만큼은 주체할 수가 없겠다.

 

 

2. 모듈러 연산에 대한 지식이 미흡했다.

 

모듈러 연산, 알고나면 참 쉽다.

그냥 + - * 할 때 피연산자들 모두에게 %만 붙여주면 될 일이다

 

근데 난 그걸 몰랐다

그래서 종이에 모듈러 연산을 적어두고 증명하느라 적지 않은 시간을 쓴 것 같다

 

이 때까지 백준에서 모듈러 연산이 나오면 그냥 안 풀거나 무지성 % 도배를 해놨는데...

귀찮다고 그랬던 게 패착이었나 싶다.

 

모르는 게 있으면 정확히 알아보도록 하자...

 

 

최종 후기

 

결과야 어찌됐든 디테일한 부분을 제외하면 만족스러운 대회라 볼 수 있겠다.

잘하는 분들은 다 출제진으로 올라가고, 아는 문제만 나오는 운도 나름 따라주기도 했고.

특히 F번은 야매로 풀어서 조금만 시간이 빡빡했어도 시간 초과를 받았을 것.

 

이 대회를 발판 삼아 ICPC는 본선 진출을 노려보도록 한다.

3솔이면 본선 진출이니...

ㅋㅋ 1솔하고 광탈했다 ㅋㅋ

이에 대한 후기는 추후에 백준에 ICPC 문제들이 뜨면 작성하기로...

 

11월 9일 이 글을 쓴 시점에

상금으로 받은 10만원은 모두 내 뱃살로 치환됐다.

아쉬운 건 아쉬운 거고, 눈 앞의 치킨은 달콤하더라.