Topcoder SRM 연습하기

Topcoder의 주소는 http://community.topcoder.com/tc 입니다. 아직 가입하지 않은 분은 이 곳에 들어가서 회원 가입을 하고 오세요.

SRM

SRM은 Topcoder에서 개최하는 정기적인 프로그래밍 대회입니다. 보통 2주에 한 번씩 열립니다. SRM 일정은 온라인 저지 캘린더알고스팟 캘린더, 또는 탑코더 공식 캘린더에서 확인할 수 있습니다. 또한 회원 가입을 한 경우에는 이메일로 다가오는 SRM 알림이 오기도 합니다.

SRM이 끝나면, 자신의 등수에 따라서 복잡한 공식을 거쳐 Rating이 결정됩니다. Rating에 따라 아이디의 색상이 결정되는데 2200이상, 1500~2199, 1200~1499, 900~1199, 1~899와 같습니다.

SRM은 총 4단계로 구성되어 있습니다.

  1. Coding phase(75분): 문제를 읽고 세 문제를 풉니다. 문제는 순서대로 Easy, Medium, Hard 이고, 당연히 Easy가 제일 쉽고, Hard가 가장 어렵습니다. 각 문제 별로 배점이 다른데, Easy는 보통 250점, Medium은 500점, Hard는 1000점입니다. 문제 난이도에 따라서 배점은 변경되기도 합니다. Easy가 300점이 될 수도 있고, Medium이 550이나 450, Hard가 900점이 될 수도 있습니다. 문제를 빨리 풀 수록 더 큰 점수를 얻게 됩니다. 이 때, 채점은 이루어지지 않습니다. 따라서,빈 프로그램을 제출해도 점수를 받을 수 있습니다.문제를 풀 수 있는 언어는 Java, C++, C#, VB, Python 입니다.
  2. Intermission(5분): 쉬는 시간입니다. 보통 이 시간에 다음 단계 챌린지에 사용할 데이터를 만들기도 합니다.
  3. Challenge phase(15분): 자신과 같은 방에 있는 다른 사람의 소스를 볼 수 있습니다. 이 때, 상대방의 프로그램이 올바르지 않은 프로그램이라면, 잘못된 결과를 출력하는 데이터를 입력할 수 있습니다. 이걸 챌린지라고 하며, 챌린지가 성공할 경우 +50점, 실패할 경우에는 -25점을 받게 됩니다. 점수가 0점 이하인 경우에는 챌린지를 할 수 없습니다.
  4. System testing phase: 채점 시간입니다. 이 단계를 통과해야 최종적으로 점수를 받을 수 있습니다.

Arena 실행하기

Topcoder SRM 문제는 웹사이트에서 풀 수 없습니다. 웹사이트에서 문제를 볼 수 있긴 한데, SRM에 참가하고 연습하려면 Arena를 실행해야 합니다. 현재 Web Arena가 베타로 운영되고 있긴 하지만, 이번 튜토리얼에서는 기존에 사용하는 Arena를 실행하는 법을 설명하겠습니다.

사이트 왼쪽 메뉴에서 Algorithm(SRM)을 찾아 클릭한다음, Launch Arena를 클릭하세요. Topcoder Arena는 JRE가 깔려 있어야 합니다. JRE는 http://www.oracle.com/technetwork/java/index.html 에서 다운받을 수 있습니다. OS별로 설치하는 방법이 다를 수도 있습니다.

Windows의 경우에는 아마 바로 Arena가 실행될텐데, OS X의 경우에는 아래 그림과 같은 창이 뜨면서 실행이 되지 않을 수도 있습니다.

이런 경우에는 Load Competition Arena 라고 써 있는 빨간 버튼을 눌러 ContestAppletProd.jnlp를 다운받아야 합니다.

여기서 저 파일을 실행시키면(실행이 되지 않는 경우에는 오른쪽 클릭을 하고 열기를 눌러야 합니다) Java를 로딩하는 창이 뜨고, 모두 완료되면 Arena가 시작이 됩니다. 중간에 이 Application을 신뢰할거냐는 메시지가 나올 수 있는데, 신뢰해야 실행이 됩니다.

여기서 자신의 Topcoder Username과 Password를 입력해 로그인합니다.

여기는 Lobby입니다. SRM을 연습하려면 위의 메뉴에서 Practice Room을 눌러야 합니다. 만약, 대회에 참가하려면 Active Contest를 클릭해 진행되고 있는 대회에 Register를 한 다음, 시간에 맞춰서 방에 입장을 해야 합니다.

Practice Room을 누르고, 826-850을 누르고 850-SRM 562 DIV 2에 들어가보겠습니다.

SRM 연습하기

여기서 중요한 버튼은 두 개입니다. Select one으로 써있는 버튼이 문제를 읽을 수 있는 버튼(저 버튼을 이용해 문제를 연 시점부터 점수 계산이 시작됩니다)이고, Summary 버튼이 현재 방의 결과를 볼 수 있는 버튼입니다.

Select one을 누르고 250을 눌러 가장 쉬운 문제를 읽어보겠습니다.

온라인 저지에 있는 문제는 문제를 해결하는 프로그램을 만드는 것이 목표이지만, Topcoder SRM은 문제를 해결하는 함수를 만드는 것이 목표입니다. 정확하게는 문제를 해결하는 Class의 Method를 만들어야 합니다.

문제는 아래와 같이 5개의 섹션으로 이루어져 있습니다.

  • Problem Statement: 문제
  • Definition: 문제를 해결하는 Class이름과 Method이름, Parameter의 타입과 return 타입
  • Limits: 시간/메모리 제한
  • Constraints: 입력 제한
  • Examples: 예제

문제 내용은 각자 읽어봅시다.

Definition을 살펴봅시다.

위에 설명한대로 여러가지 이름과 타입이 써있네요. 이를 바탕으로 아래 Coding Arena에 코드를 작성해야 합니다. 위의 정보를 바탕으로 Code를 자동으로 생성해주는 Editor도 있지만, 설치방법과 사용방법은 다음에 설명하기로 하고, 일단 모든 코드를 작성해봅시다.

이제 check 함수를 작성하면 됩니다. 함수는 스스로 작성해봅시다~

코드를 작성한 다음, 아래 Compile 버튼을 눌러서 컴파일 해볼 수 있습니다. 이 버튼은 자신의 컴퓨터에서 컴파일 하는 것이 아니고, Topcoder 서버에서 컴파일 하는 버튼입니다.

이런 메시지가 뜬다면, 컴파일 실패입니다. 에러를 수정해 다시 컴파일해봅시다.

이 메시지는 컴파일에 성공한 메시지입니다.

컴파일에 성공했으면 Test를 해볼 수 있습니다. Test는 문제에 나와있는 Examples 중 하나를 선택할 수도 있고, 자신이 직접 데이터를 넣을 수도 있습니다.

Test를 수행한 결과는 아래와 같은 창으로 볼 수 있습니다.

온라인 저지 문제와 다르게 함수를 구현하는 방식이기 때문에, stdout과 stderr에 출력하는 내용은 채점 결과에 영향을 미치지 않습니다.

참고로 stderr에 출력하는 방법은 다음과 같습니다.

온라인 저지에서는 stderr에 출력하는 내용이 있을 경우 런타임 에러로 처리하기 때문에, 온라인 저지에 제출할 때는 stderr을 사용하지 않는 것이 좋습니다. 후에 채점 프로그램이 업그레이드 되면 stderr에 출력한 내용이 있더라도 런타임 에러를 받지 않을 것입니다. 하지만, 아직은 그렇게 채점하고 있습니다.

Batch Test 버튼을 누르면 한 번에 모든 Examples를 실행해 볼 수 있습니다.

Test와 Batch Test모두 Return value가 YES이면 맞았다는 소리입니다. 올바르지 않은 프로그램을 작성한 경우에는 아래와 같은 메시지를 받을 수 있습니다.

그리고, 소스를 변경한 경우에 Compile을 누르지 않으면, 마지막에 Compile한 소스로 Test와 Batch Test를 수행하게 됩니다. 따라서, Test를 하려면 Compile을 먼저 해야 합니다.

자신이 작성한 프로그램이 올바른 정답을 낸다고 생각하면, Submit 버튼을 이용해 제출할 수 있습니다.

Submit을 하면, 아래와 같이 자신의 점수를 볼 수 있습니다.

위에서도 설명했지만 Submit은 단순히 제출을 뜻할 뿐이지 맞았다는 의미는 아닙니다.

실제 SRM에서는 System Testing Phase까지 기다려야 하지만, 연습할 때는 자신이 직접 테스트를 돌려볼 수 있습니다.

Practice Options 메뉴에는 3가지 메뉴가 있습니다. 여기서 Run System Test를 눌러서 채점을 받을 수 있습니다.

틀린 경우에는 위와 같이 어떤 데이터를 틀렸는지 볼 수 있고

맞은 경우에는 위와 같은 창을 만나볼 수 있습니다.

자 이제 Summary 버튼을 눌러봅시다.

여기서는 다른 사람들의 점수와 소스를 볼 수 있습니다.

점수의 색상은 푼 언어를 나타내는데, Java, C++, C#, VB, Python 입니다. 점수를 더블클릭하면 해당 솔루션을 볼 수 있는데, 화면 아래 챌린지 버튼을 이용해서 챌린지를 할 수 있습니다.

챌린지 창에서는 예제를 넣을 수도 있고, 직접 만든 데이터를 넣을 수도 있습니다. 창은 Test창과 같은 형식으로 생겼습니다.

SRM 연습에 대한 설명이었습니다.

댓글 댓글 쓰기