탑코더(TopCoder) 시작하기..
Problem Solving/TopCoder logs 2007. 8. 7. 16:33
저희 동아리 위키 페이지에서 몇 줄만;
- 룰 -
Algorithm Competition 의 라운드하나는 다음 과정으로 나뉘어진다.
Coding phase: 75분.
문제를 보고 코딩을 한다. 문제별로 최대 점수가 있고, 해당 문제를 여는 시점부터 시간이 계산되어, 답을 제출할 때까지 시간이 길수록 점수가 낮아진다. 대개는 문제 최대 점수와 난이도는 비례한다.
만약 easy 를 열고, 답을 제출하지 않은 뒤, 다시 medium 을 열어서 풀고, 다시 easy 를 제출한다면, 처음 easy 를 연 이후까지의 시간이 쭉 계산된다. 그러므로, 한번 연 문제를 풀지 않고 포기하는 것은 왠만해선 하면 안 될 행동이다.
대개의 경우, easy 는 250점, med 는 500점, 그리고 hard 는 1000점이다. 세 문제를 다 안정적으로 계속 풀 수 있다면, 전체 10위 안에 계속 들 수 있다.
Intermission: 5분.
Challenge phase: 15분.
같은 방에 있는 다른 사람들의 제출된 솔루션을 room summary 에서 보고, 잘못된 입력을 집어넣어 솔루션이 틀림을 보인다. 애플릿을 통해 상대의 프로그램을 원하는 패러미터를 넣어 실행할 수 있으며, 저자 solution 과 다른 결과가 나오면 성공. 내 프로그램이 상대방의 challenge 를 통과하지 못하면 해당 문제 점수는 0점이 된다.
성공시엔 50점, 실패시엔 -25점을 얻는다. 꽤 큰 factor 가 된다.
System test: 실제 테스트 케이스로 프로그램을 테스트해본다. 실패하면 0점이 되고, 여기에서 살아남아야만 최종 점수가 된다. 다 하려면 15분에서 30분 정도가 걸린다.
위 라운드 하나로 이루어지는 경기를 SRM (싱글 라운드 매치) 라고 한다. 멀티 라운드 매치는 없고, 일년에 몇번 하는 큰 대회인 토너먼트가 있다. 토너먼트에는 TopCoder open, TopCoder Collegiate Challenge 가 있다.
- 문제 예제 -
http://www.topcoder.com/tc 에서 Launch Arena Applet / 로그인 / Practice Room / SRM237 Div 1 로 들어간다. (274번방) Select One 에서 250 을 눌러보면 BoxUnion 이란 문제가 나온다.
요는, 좌표들을 포함하는 4개까지의 사각형들의 합집합의 넓이를 구하라는 것이다. 클래스의 멤버 함수를 작성하기 때문에, 입출력을 작성하지 않아도 되지만 내 컴퓨터에서 직접 실행해서 테스트할 수는 없다. JongMan 이 작성한 C++ 코드는 다음과 같다. JongManBoxUnion
보면, 일반적인 좋은 코드에 요구되는 것과 다른 것을 쉽게 알 수 있다. 모든 게 다 빨리 짜기 위한 방편이다.
- 코드 템플릿 -
빨리 짜기 위한 방편으로 코드 템플릿을 쓴다. 자주 쓰는 #include 나 typedef 등을 미리 해 둔다. JongManTopCoderTemplate 을 참조하면 좋다. 단, 쓰지 않는 코드가 코드 안에 많을 경우 엄청난 페널티를 받기 때문에, tomatrix() 함수군 등은 필요할 때만 복사해 쓰면 좋다.
그 외, 계산기하 같은 것들은 미리 구현해서 가지고 있는 것이 좋다.
- 플러그인 -
기본 Arena 에서 코딩하기란 거의 불가능하기 때문에 (esperance 는 한다) 여러 플러그인들이 존재해, 프로그램 작성을 쉽게 해 준다. 요 링크를 참조하며, KawigiEdit 를 쓰는 것을 추천한다.
syntax highlight, autoindent 등을 지원하며, 로컬 컴파일러로 실행하고 테스트해볼 수 있는 환경 또한 제공한다.
- 연습을 하고 나서 -
에디토리얼은 잘 정리된 설명들을 갖고있다.
-----------------------------------------------------------------------------
예전에 JongMan님이 http://acm.kaist.ac.kr 포럼에 올린 글..
아직 뭔지 잘 모르지만.. 조만간에 시도해봐야겠다..
관련글: 온라인 프로그래밍 경시대회 TopCoder 소개
- 룰 -
Algorithm Competition 의 라운드하나는 다음 과정으로 나뉘어진다.
Coding phase: 75분.
문제를 보고 코딩을 한다. 문제별로 최대 점수가 있고, 해당 문제를 여는 시점부터 시간이 계산되어, 답을 제출할 때까지 시간이 길수록 점수가 낮아진다. 대개는 문제 최대 점수와 난이도는 비례한다.
만약 easy 를 열고, 답을 제출하지 않은 뒤, 다시 medium 을 열어서 풀고, 다시 easy 를 제출한다면, 처음 easy 를 연 이후까지의 시간이 쭉 계산된다. 그러므로, 한번 연 문제를 풀지 않고 포기하는 것은 왠만해선 하면 안 될 행동이다.
대개의 경우, easy 는 250점, med 는 500점, 그리고 hard 는 1000점이다. 세 문제를 다 안정적으로 계속 풀 수 있다면, 전체 10위 안에 계속 들 수 있다.
Intermission: 5분.
Challenge phase: 15분.
같은 방에 있는 다른 사람들의 제출된 솔루션을 room summary 에서 보고, 잘못된 입력을 집어넣어 솔루션이 틀림을 보인다. 애플릿을 통해 상대의 프로그램을 원하는 패러미터를 넣어 실행할 수 있으며, 저자 solution 과 다른 결과가 나오면 성공. 내 프로그램이 상대방의 challenge 를 통과하지 못하면 해당 문제 점수는 0점이 된다.
성공시엔 50점, 실패시엔 -25점을 얻는다. 꽤 큰 factor 가 된다.
System test: 실제 테스트 케이스로 프로그램을 테스트해본다. 실패하면 0점이 되고, 여기에서 살아남아야만 최종 점수가 된다. 다 하려면 15분에서 30분 정도가 걸린다.
위 라운드 하나로 이루어지는 경기를 SRM (싱글 라운드 매치) 라고 한다. 멀티 라운드 매치는 없고, 일년에 몇번 하는 큰 대회인 토너먼트가 있다. 토너먼트에는 TopCoder open, TopCoder Collegiate Challenge 가 있다.
- 문제 예제 -
http://www.topcoder.com/tc 에서 Launch Arena Applet / 로그인 / Practice Room / SRM237 Div 1 로 들어간다. (274번방) Select One 에서 250 을 눌러보면 BoxUnion 이란 문제가 나온다.
요는, 좌표들을 포함하는 4개까지의 사각형들의 합집합의 넓이를 구하라는 것이다. 클래스의 멤버 함수를 작성하기 때문에, 입출력을 작성하지 않아도 되지만 내 컴퓨터에서 직접 실행해서 테스트할 수는 없다. JongMan 이 작성한 C++ 코드는 다음과 같다. JongManBoxUnion
보면, 일반적인 좋은 코드에 요구되는 것과 다른 것을 쉽게 알 수 있다. 모든 게 다 빨리 짜기 위한 방편이다.
- 코드 템플릿 -
빨리 짜기 위한 방편으로 코드 템플릿을 쓴다. 자주 쓰는 #include 나 typedef 등을 미리 해 둔다. JongManTopCoderTemplate 을 참조하면 좋다. 단, 쓰지 않는 코드가 코드 안에 많을 경우 엄청난 페널티를 받기 때문에, tomatrix() 함수군 등은 필요할 때만 복사해 쓰면 좋다.
그 외, 계산기하 같은 것들은 미리 구현해서 가지고 있는 것이 좋다.
- 플러그인 -
기본 Arena 에서 코딩하기란 거의 불가능하기 때문에 (esperance 는 한다) 여러 플러그인들이 존재해, 프로그램 작성을 쉽게 해 준다. 요 링크를 참조하며, KawigiEdit 를 쓰는 것을 추천한다.
syntax highlight, autoindent 등을 지원하며, 로컬 컴파일러로 실행하고 테스트해볼 수 있는 환경 또한 제공한다.
- 연습을 하고 나서 -
에디토리얼은 잘 정리된 설명들을 갖고있다.
-----------------------------------------------------------------------------
예전에 JongMan님이 http://acm.kaist.ac.kr 포럼에 올린 글..
아직 뭔지 잘 모르지만.. 조만간에 시도해봐야겠다..
관련글: 온라인 프로그래밍 경시대회 TopCoder 소개
'Problem Solving > TopCoder logs' 카테고리의 다른 글
TopCoder SRM 371 Div2 (완료) (2) | 2007.10.14 |
---|---|
TopCoder SRM 370 Div2 (0) | 2007.10.14 |
TopCoder SRM369 DIV2 (6) | 2007.10.05 |
TopCoder SRM 368 Div 1 (0) | 2007.10.03 |
TopCoder SRM 367 Div 2 (완료) (10) | 2007.09.27 |
TopCoder SRM 366 DIV 1 (2) | 2007.09.18 |
TopCoder SRM 365 Div 1 (0) | 2007.09.13 |
TopCoder SRM 364 Div 1 (0) | 2007.09.09 |
TopCoder SRM 363 Div 2 (완료) (0) | 2007.08.12 |
TopCoder SRM 362 Div 2 (0) | 2007.08.08 |