티스토리 뷰
-1. PS는 Problem Solving의 약자로, 프로그래밍으로 문제를 푸는 분야를 말합니다.
0. 서론 (+잡담)
드디어 PS를 접고 PS4를 열심히 하고 있습니다. 최근에는 플스4로 아틀리에 신기시리즈를 열심히 하고 있는데, 취향에 맞아서 재밌게 즐기고 있습니다. 지금까지 문제 풀면서 힘든적이 엄청 많았던 거 같은데, 요즘은 문제의 N도 안보는 생활을 하고 있어서 매우 만족하고 있습니다. 이제 재밌게 대회를 하기에는 너무 멀리 왔다고 생각합니다.
사실 저는 대회에 참가하는 것을 즐기는 성격이 아닙니다. 성격상 대회에서 못하면 힘들고, 잘하면 딱히 좋아하지 않아서, 결국 힘들기만 합니다. 그래도 작년 1년 6개월동안은 대회는 싫은데 대회를 나가야해서, 인지부조화에 시달리면서 열심히 생각한 것들이 있습니다. 그 중 하나가 이제 말할 "좋은 대회의 조건"입니다.
모든 대회를 전부 아우르는 설명을 하고 싶은 욕심도 있지만, 그건 제 능력 밖의 일이어서 프로그래밍 대회에 한정해서 끄적여 보겠습니다. 아마도 다른 분야의 대회도 대충 맞지 않으려나..?
1. 대회는 무엇을 하나요?
대회에서는 "정말 많은 것들"을 하지만, 가장 비중이 큰 것은 경기 진행과 시상식(그리고 기업 홍보)입니다. 작년에 있었던 삼성이나 LG, 카카오 기업대회와 ICPC에서는 경기와 시상식, 기업설명회를 했고, KOI는 경기 진행과 시상식만을 하고 있습니다. (IOI나 ICPC 월파같은 세계대회에서는 친목을 다질 수 있는 이벤트가 많이 있고, 관광도 시켜주기 때문에 경기 이외의 것들을 매우 많이 합니다.)
이것만 보면 대회의 역활은 잘 하는 사람에게 상을 주는 것과, 기업 홍보 (그리고 친목과 즐길 거리)정도가 있는 것 같습니다. 그리고, 개인적으로 결론이 매우 마음에 들지 않아서 다른 방향으로 생각해봤습니다 - 대회가 없는 경우와 있는 경우의 차이는 무엇일까? 그래서 모든 PS 대회가 없다면 무슨 일이 있을지에 대해 생각했습니다.
아마 많은 분들이 여러 대회를 접하면서 PS를 시작했을 것이라 생각합니다. 저는 초6때 KOI라는 대회를 알게 되면서 프로그래밍을 시작했습니다. 중고등학생은 정보올림피아드가 고입이나 대입에 도움이 된다고 믿기(?) 때문에 시작하는 경우가, 대학생은 취업에 도움이 되어 시작하는 경우가 많습니다. 대회가 없다면 대회를 접하면서 시작한 사람들이 없을 것이고, PS분야의 규모가 엄청나게 작았을 것입니다. 국내대회가 많아진 최근 3년동안 PS분야의 규모가 엄청나게 커진 것을 보면 체감이 되실 것 같습니다.
프로그래밍 문제를 풀어본 분이라면 아시겠지만, 난이도가 조금만 높아져도 대부분의 문제들이 "수학문제"입니다. 정해가 10줄도 안되는 설탕배달과 같은 문제에서 엄청나게 많은 양의 질문글이 올라오는 것을 보면 감이 오실 것 같습니다. 문제는, 이런 수학문제를 재밌게 풀 수 있는 사람은 극히 드뭅니다. 결국 (약간의 PS는 현업에 도움이 되기 때문에) 회사는 일을 위해 PS를 억지로 시켜야 하는 상황이 됩니다. 그 동기를 만들어주는 것이 여러 대회들이라고 할 수 있습니다. 1
요약하면, 대회는 경기와 시상 말고도, PS라는 분야를 홍보하면서 동기를 부여해주는 역활을 합니다.
2. 그래서 좋은 대회란 무엇인가요?
제가 생각하는 좋은 대회는, "대회가 제 기능을 한다"입니다. 그리고 그 기능은 위에서 말한 "홍보"와 "동기부여" 입니다.
이를 잘 수행한 대회의 예시로는 NYPC나 SCPC와 같은 기업대회가 있습니다. 이 대회들은 많은 중고등학생과 대학생들에게 프로그래밍, 특히 접근성이 낮았던 알고리즘 분야를 접할 수 있는 계기를 주었습니다. 대중들에게 알고리즘 분야를 홍보하는 것에 성공했고, 그 결과 알고리즘 커뮤니티와 여러 사업들의 가치를 인정받을 수 있게 되었습니다.
3. 그래서 하고싶은 말이 뭔가요?
최근에 여러 불만있는 대회들이 많이 있었습니다. 17 IOI, 18 WF, CF 물리문제 같은 것들입니다. 이런 대회들이 왜 만족스럽지 않은지에 대해 하나씩 말해보려고 합니다.
(1) 18 WF는 ICPC가 근본이 없는 대회라는 것을 다시 한 번 보여주는 대회였습니다. 물리 문제가 메달을 갈랐고, 더블 오차와 팀노트가 금메달을 갈랐고, 문제와 상관도 없는 시간커팅 이슈가 대다수, 300줄을 짜고도 대회 시간 내에 AC를 받는 것이 보장이 안되는 백트래킹 문제가 있습니다. ICPC의 출제 범위가 "인간이 아는 모든 지식"이라는 것을 대다수가 수용하고 있습니다. 때문에 출제자의 지식 수준이 곧 ICPC의 출제 범위가 될 수밖에 없고, 이것은 결국 많은 홈 어드벤티지를 만들게 됩니다. (최근 예시로, Ho Chi Min 17년도 리저널 대회가 있습니다)
ICPC가 근본이 없다는 것은 매우 많은 문제를 발생시킵니다. ICPC 대회를 준비하기 위해 물리 공부를 해야 하고, 미적분이나 정수론도 공부해야 하고, 수많은 분야를 공부해야 하는데, 어디까지 공부해야 하는지도 감이 잡히지 않습니다. 이것은 동기 부여가 잘 되지 않기도 하고, 동기 부여를 어디에 해야 하는지도 명확하게 되지도 않습니다. 저도 나름 공부를 많이 한 편이지만, ICPC에 나올 수 있는 지식 전체의 극히 일부만 알고 있습니다.
또다른 문제점은, ICPC 대회에서 높은 상을 받은 것에 대한 의미를 희석시킵니다. 올해 18 WF의 메달리스트들이 과연 프로그래밍을 잘 해서 메달을 받은 것인가에 대해 생각해보시면 알 것 같습니다. 그들이 메달을 받은 이유는, (1) 물리를 어느정도 잘 했거나, (2) 팀노트에 보로노이를 넣었거나, (3) 더블 오차에 대해 잘 해결했거나(혹은 운이 좋았거나) 입니다. 여기서 어떤 이유도 "프로그래밍을 잘 했다"는 내용은 없다고 생각합니다. 제가 생각하는 프로그래밍을 잘하는 것은, 코딩이 빠르고 정확하며, 문제 해결을 위한 알고리즘을 빠르고 정확하게 생각했다는 것을 의미합니다.
(2) 17 IOI는 Nowrus라는 문제가 가장 논란이 큰 문제였습니다. Nowrus는 탑코더 마라톤 형식의 문제였고, Heuristic이 IOI Syllabus에서 Out of focus로 빠져있기 때문에 나오면 안되는 문제였다고 생각합니다. 지금까지 수많은 xOI 대회가 있었고, 그 중에 마라톤 형식의 문제가 나온 대회는 못봤습니다. 하지만 IOI는 사람들의 예상을 깨고 마라톤 문제를 출제했고, 많은 실력자들이 낮은 등수를 받게 되었습니다. (이것은 코포 레이팅과 IOI 성적의 관계 그래프를 보면 알 수 있습니다.)
Nowrus는 단순히 문제가 출제되어 결과가 이상해졌다는 것 이상의 의미를 가지고 있습니다. 많은 나라들이 마라톤 형식의 문제에서 뒤통수를 맞았기 때문에, 다른 나라 대회에서도 마라톤 형식의 문제를 출제하게 될 것을 의미하기도 합니다. IOI는 모든 나라 올림피아드의 표본이 되는 대회입니다. IOI의 성적을 잘 내기 위해 선발고사를 치뤄야 하는 입장에서, IOI와 비슷한 문제로 줄을 세워 대표를 선발하는 것이 가장 좋은 방식이기 때문입니다. 이런 IOI에서 마라톤 문제가 나왔으니, xOI에서 마라톤 문제가 나오는 것이 당연해졌다고 생각합니다. (Heuristic이 Out of focus이지만, 그게 중요한 게 아니니까..)
IOI에서 고등학생 대회에 마라톤 문제를 낸 이상, 이제 고등학생들은 마라톤 문제를 공부해야 합니다. IOI라는 대회가 마라톤 문제에 동기 부여를 하게 되는 상황이, IOI가 이것을 의도했는지는 모르겠지만, 어쨋거나 Syllabus와는 다른 잘못된 동기 부여라고 생각합니다.
(3) 최근 코포 Div2 E에 물리 문제가 출제되었습니다. 요약하면, 볼록다각형 판에 못을 꽂으면 판이 중력에 의해 돌아갈텐데, 이 때 직사각형 판이 멈추는 위치를 계산하는 문제입니다. (지금 생각해보니 못에 마찰이 없으면 무한히 진동하고, 마찰이 있으면 문제에 의도한 위치에 멈추는 것도 아니군요.)
물리를 알면 푸는 문제를 Div2 E에 냈다는 것은, 결국 프로그래밍을 하는 사람들이 물리공부를 해야 한다는 것을 의미합니다. 프로그래밍 공부만 해도 빠듯한 Div 2, 3 사람들에게 물리 공부를 하게 하는 것이 과연 바람직한 현상인지에 대해 잘 생각해봐야 합니다. 그들에게 중요한 것은 재귀나 DP와 같은 trivial한 문제들을 생각하는 능력과 그것을 구현하는 능력이지, 물리 지식이 아닙니다.
4. 그리고..
이상하게 물리 문제에 대해 불평을 하면, 물리를 못해서 그런 것이 아니냐고 질문이 돌아오는 경우가 많이 있습니다. 본질을 해치는 질문이기도 하고, 제가 물리를 못하는 것도 아닙니다. 나름 중등부 물리올림피아드 금상도 받았고, IAO를 준비하기 위해 천체물리도 열심히 공부했던 경험이 있습니다. 저 질문 말고도 러시아에서는 *학년에 배웠다고 문제가 아무 문제가 없다고 하는데, 그런 말은 러시아에서만 했으면 좋겠고, 애초에 학교에서 배웠다고 프로그래밍 대회에 내도 된다는 것은 대체 무슨 논리인지 모르겠습니다.
열심히 짜증나는 말은 열심히 적었지만, 지금은 사실 반포기 상태라서 그냥 할 일 하기로 했습니다. 이제 할 일 하면서, 게임이나 열심히 하려고 합니다.
끝!
- 의문이 든다면, 다른 많은 분들의 글을 참조하세요. [본문으로]
'ICPC, CP 칼럼' 카테고리의 다른 글
== UCPC F. parentheses recover 풀이 == (feat. 모델링의 중요성) (0) | 2018.11.14 |
---|---|
도움이 필요한 당신에게: 뒤풀이 (1) | 2018.06.13 |
MolaMola의 구성원 분석 및 팀 전략 (4) | 2018.04.23 |
MolaMola팀 팀노트 (3) | 2017.11.22 |
ICPC 팀 전략에 대한 개인적인 생각 (7) | 2017.11.21 |