알고리즘 문제풀이/기타 대회

중앙대학교 2020 SW‧AI전공 코딩경진대회 후기 - 최우수상 수상!

닷넷 지키미 백발백준 2020. 9. 28. 19:56

오늘은 지난 9월 25일에 치뤄졌던 중앙대학교 2020 SW‧AI전공 코딩경진대회에 참가한 후기를 적어보려고 한다. 작년부터 학교 측에서 진행하고 있는 대회로 올해 대회는 작년 수상자의 대부분이 군입대, 졸업 및 개인 사정으로 인하여 불참하게 되어 아쉬운 상태로 진행되었다.

 

플랫폼은 프로그래머스를 사용하였고 코로나19 사태로 인하여 모니터 캡쳐 및 웹캠이나 폰 카메라를 이용하여 본인의 모습을 카메라로 찍는 방식으로 진행하였다. 다행히 구름 플랫폼에서 진행하였던 브랜디 코드네임B 2차대회와 비슷한 방식이라 적응에 어렵지는 않았다.

 

우선 코딩경진대회는 예전에 설명드렸던 코딩부트캠프 과목의 1차 코딩테스트를 겸하여 진행되었다. 코딩부트캠프 과목은 총 3번의 코딩테스트 중에 1번을 통과해야 Pass를 주도록 되어있는데 이후 진행될 코딩테스트 대한 참고자료가 되기도 하였다. 1차 코딩테스트의 통과 기준은 200점이었다.


문제가 공개되어있지 않아 얘기하긴 힘들 것 같고 간단하게 제가 짰던 풀이를 설명 드리면

1번 문제
DFS로 노드 사이 관계를 확인한 뒤에 각 그룹별 리더를 구하는 것이었다. 처음에는 그룹을 따로 파악하는데 Union-Find를 쓰는 줄 알았으나, 10분만에 푸신 분이 나와서 꼭 Union-Find가 꼭 필요 없다는 것을 깨닫고 DFS로 30분 정도만에 풀 수 있었다.

2번 문제
위상정렬 문제인데 모든 노드에 대하여 실행하는 것이 아니라, 일단 필요한 노드들을 따로 탐색해야되었으며, 위상정렬을 할 때도 제시된 순서에 따라 나열해야 되었다. 게다가 숫자로 노드를 주는 것이 아니라 문자열 형태로 노드를 줘서 map을 사용해야 됬기에 더욱 어려웠다. 따라서 굉장히 시간을 많이 잡아먹는 문제였다.

3번 문제
LCA에 대한 문제가 나왔다. 백준 문제 중 LCA 2에 대한 풀이를 알면 만점을 받을 수 있었으나 해당 풀이를 대회 중에 생각해내지 못해서 결국 부분점수로 81점을 획득하였다.

4번 문제
선인장 그래프에 대한 내용이 나오긴 했는데 제대로 이해하지 못해서 20점을 얻었다.

 

문제 푼 순서를 설명드리면 1-2-3-2-4 순서로 문제를 풀었다. 2번 문제가 생각보다 많이 어려웠고 몇번 갈아엎기를 반복하며 많은 시간을 사용한 뒤에 제출했는데 25점이 나왔다. 일단 200점만 넘자는 마인드로 3번을 봤는데 생각보다 LCA라는 익숙한 유형이 나왔고 빠르게 풀었더니 81점이라는 높은 점수가 나왔다. 그렇게 커트라인을 통과하니 마음이 편해지면서 2번 문제에서 문제가 되는 부분을 발견하여 100점을 얻었고, 4번 문제는 잘 이해가 가지 않았으나 입출력 예제를 보고 적당히 부분점수를 얻을 수 있을 것 같아 20점을 얻었다. 따라서 100 + 100 + 81 + 20 = 301점으로 대회를 마무리하였다. 사실 프리징 전까지 수상권 밖에 있어서 1차 코딩테스트도 통과 못할 줄 알았는데 다행히 프리징 이후에 좋은 성적을 얻을 수 있었다.

 

결과적으로 아래와 같이 3등으로 최우수상을 수상하였다. 사실 LCA 2 풀이를 현장에서 떠올려서 3번 문제를 만점 받아도 1등은 못했을 것이기에 해당 순위에 만족한다. 2등을 하신 분께 물어보니 나랑 점수는 똑같았고 최고 점수를 나보다 빨리 도달해서 나보다 위였다고 한다. (어짜피 2,3등 모두 최우수상이라 큰 의미는 없었다.) 프리징 전에 281점을 획득하신 분이 계셔서 4~5등쯤을 예상하고 있었는데 그 분이 프리징 이후에 점수를 획득하지 못하셔서 운좋게도 3등을 차지하게 되었다.

코딩경진대회 최우수상 수상

문제의 난이도와 배치에 대해서 짧게 평을 해보자면 일단 4문제 중에 3문제가 그래프 문제라는 쏠림 현상이 심했다. 다음 대회 때는 다양한 주제를 다루도록 문제를 만들면 좋을 것 같다. 난이도는 담당 교수님께서 1차 코딩테스트에서 통과를 많이 시키지 않을 것이라 하셨는데 그 얘기하신 목표치보다도 적은 학생들이 200점 이상을 받았다. (심지어 작년 수상자 중에 이번 대회에 200점을 못넘긴 분도 계셨다.)

 

이번 문제들을 solved.ac 난이도를 매긴다면(만점 기준) 1번은 실버1, 2번은 골드2, 3번은 플레5, 4번은 플레2~다이아5 정도인 것 같다. 사실 1차 코딩테스트는 대회와 겸하다보니 브랜디 코드네임B 대회 같은 느낌이 많이 났었다. 2차, 3차 코딩테스트는 보다 더 코딩테스트에 적합한 문제들을 출제함과 동시에 난이도를 많이 낮춰야 될 것으로 생각이 든다. (만약 2차, 3차 코딩테스트를 내가 출제한다면 브랜디 코드네임B 1차대회 수준으로 낼 것 같다.)

 

정리하자면 중간에 2번 때문에 힘든 대회였지만 결과적으로 최우수상을 수상하게 되어 기분이 좋아졌다. 이번 대회에서 아쉽게 200점을 충족하지 못하신 분들도 2차, 3차 코딩테스트에서 통과할 수 있도록 열심히 준비하였으면 좋겠다.

 

 

추가 : 수상자들의 스코어보드가 공개되었다. 아울러 1차 코딩테스트 통과 기준이었던 200점 이상을 달성한 참가자는 총 7명이었고, 이 중 코딩부트캠프 과목 수강 학생은 총 3명이었다. 즉 3명만 1차 코딩테스트에서 통과하게 된 셈이다.

수상자 스코어보드