아마 알고리즘 PS(Problem Solving) 분야를 공부하시는 분이라면 한번쯤은 CP(Competitive Programming)에도 참여해보셨을 것입니다. PS가 알려진 알고리즘을 이용해서 프로그래밍 문제를 푸는 것이라고 한다면, CP는 이러한 형태의 문제를 같은 시간대에 여러명이 참여해서 제한시간내에 문제를 풀고 점수를 획득하여 랭킹을 매긴 뒤 Rating을 얻는 방식이라고 할 수 있습니다.


이러한 CP에는 세계적으로 가장 유명한 대학생 대상 프로그래밍 대회인 ACM-ICPC를 비롯하여 온라인에서 자주 이루어지는 Codeforce Contest, AtCoder Contest와 Topcoder Single Round Match 등이 있습니다. 이 외에도 저는 참여해보지 않았지만, Facebook Hacker Cup이나 Hacker Rank같은 것도 비슷한 종류의 대회라고 생각합니다.


어쨋든간 저는 대부분 Codeforce Contest에 참여하곤 했는데 이번에 기회가 되어서 Topcoder SRM에 참여해보려고 했습니다. 인터넷에서 SRM 참여 관련 자료들이 꽤나 있었는데, 옛날 자료이기도 하고 Topcoder 플랫폼 자체가 많이 변해서 자료들과는 조금 다른 점들과 해맨점이 있었습니다.


Codeforce의 경우는 사이트 접속시 직관적인 UI로 쉽게 Contest에 참여할 수 있었는데요 Codeforce의 경우는 알고리즘 문제 해결이 사이트의 주요 목적이다보니 컨테스트 참여와 문제풀이와 같은 UI는 쉽게 익숙해질 수 있었습니다. 하지만 Topcoder의 경우는 SRM 외에도 다양한 많은 기능들을 제공하고 있다 보니 SRM 참여와 SRM 시작 시기를 아는 것이 조금 불편했습니다.


이제 SRM의 참여 방법과 관련된 이야기를 해보려고 합니다.


일단 첫번째로는 Topcoder SRM의 개최 시기를 알아야겠지요? 다음 링크로 이동해봅니다.

https://www.topcoder.com/community/events/


그러면 위와 같은 켈린더를 확인할 수 있는데요, 여기서 하단에 시간대를 보면 "동부 표준시"라는 것을 알 수 있습니다. 이는 구글링 해 보면 
 UTC-05시, 섬머 타임 시에는 UTC-04라는 것을 알 수 있습니다. 한국 표준 시간인 KST의 경우 UTC+09인 것을 감안하면 5+9=14 즉 14시간 정도 차이가 나는 것으로 알 수 있습니다. 즉 구글 캘린더에 나타난 시간에서 14시간을 더해주어야지 한국 시간인 것입니다. 이미지에 나타난 SRM 727의 경우 1월 10일 오후 9시이지만, 한국 시간으로는 1월 11일 오전 11시에 시작했습니다.


이러한 불편함은 다음 링크에 있는 알고스팟 캘린더를 확인하면 간편합니다.

https://algospot.com/calendar/

알고스팟 캘린더의 하단을 보면, 시간 기준이 "서울"로 되어있습니다. 앞에 나와있는 [CF]는 Codeforce의 약자이며, [TC]는 탑코더의 약자입니다. 알고스팟 캘린더는 프로그래밍 콘테스트의 일정이 모여있으므로 훨씬 편리하게 확인할 수 있습니다.


또는 백준저지 캘린더를 확인해도 됩니다. 백준 저지 캘린더에 훨씬 많은 일정들이 빽빽하게 들어있습니다.

https://www.acmicpc.net/calendar




이제 탑코더 사이트로 이동해보도록 하겠습니다.

https://www.topcoder.com


첫 화면 페이지부터 여타 다른 OJ나 CP용 홈페이지와는 조금 다른, 기업용 페이지 같은 모습을 띄고 있습니다. 

일단 화면 중앙의 "I want to join Topcoder" 를 눌러서 회원가입을 했다고 가정하겠습니다.


우측 상단의 Login 버튼을 누르면 중앙에 보이는 것 처럼 두개의 창이 뜨게 됩니다. 이 중 우리의 목적은 SRM을 통한 CP이므로, It's time to compete and win에 맞는 Community log in을 누릅니다.


로그인을 하게 되면 다음과 같은 페이지로 이동하게 되는데, 상단 위젯을 통해서 Competitive Programming을 누릅니다.


그러면 다음과 같은 화면이 나타나게 됩니다. 우측에 나타난 캘린더에서 빨간색으로 표시된 날짜에는 SRM이나 MM(Marathon Match)와 같은 이벤트 등록된 날짜이며, 실제 발생할 시간이 되기 전에는 미리 빨간색으로 나타나지 않는 것으로 보입니다. 따라서 위에서 확인한 구글 캘린더에 있는 아직 시행되지 않은 Round가 보이지 않는다고 해서 불안해 할 필요는 없습니다.


왼쪽부분에는 SRM의 각 Phase 별 시작 시간과 종료 시간에 대해서 설명이 되어 있습니다. 

SRM 라운드 스케쥴과 관련된 설명은 다음 링크에 있습니다.

https://www.topcoder.com/member-onboarding/competing-in-an-algorithm-match-srm/

SRM 등록의 경우 SRM 시작 3시간 전 부터 시작 5분 전까지 가능하다고 쓰여있지만 최근에는 4시간 전 부터 가능한 경우가 많다고 합니다.


다른 포스팅들을 보면 java로 작성된 클라이언트를 다운로드해서 참여해야한다고 나와있지만, 최근에는 업데이트가 되었는지 별도의 프로그램 설치 없이 웹 인터페이스만으로도 대회 참여가 가능합니다. 온라인에서 컴파일 및 TestCase 실행을 해 볼 수 있지만, 반응이 좀 느리고 서버가 약간 불안정했습니다.


대회가 끝나면 다음 링크에 풀이인 Editorial이 올라오는 것으로 보이며, 비공식적으로 코드포스 블로그에 올라오는 경우도 있는것으로 보입니다.

https://www.topcoder.com/community/data-science/data-science-editorials/


혹시 최근에 탑코더 SRM에 입문하실 의향이 있는 분들이 있다면 제 글을 보고 도움이 되기를 바랍니다.



* Topcoder SRM 관련해서 더 읽어볼만한 글들

https://www.acmicpc.net/blog/view/2

https://algospot.com/wiki/read/TopCoder_%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC

+ Recent posts