Codeforces Tutorial

Codeforces(코드포스)는 Topcoder와 유사하게 정기적으로 프로그래밍 대회가 열리는 사이트입니다.

최근 들어 Topcoder SRM에 비해 자주 Contest들이 개최되다보니(한 달에 대략 6번 가량의 Contest를 개최한다고 합니다.) 사용자가 꾸준히 증가하여 Division 1의 경우 약 1000명, Division 2의 경우 약 5000명 가량이 매번 참가하고 있습니다. 출제는 Polygon(폴리곤) 이라는 툴을 통해 Codeforces 유저들이 문제를 내고, 충분한 검수 과정을 거치는 것으로 진행됩니다.

Register

Codeforces 메인 페이지에서 최상단, 우측에 Register를 클릭하시면 몇 가지의 정보(E-mail, ID, PW 등등)를 입력하시고 회원가입을 하실 수 있습니다.

회원가입을 마치면 마지막으로 E-mail 확인을 통해 최종적으로 계정이 사용 가능하게 됩니다.

Rating System

Contest가 끝나면 모든 참가자의 Rating이 복잡한 계산식을 통해 계산되어 갱신됩니다.

아래의 표는 코드포스에서 참가자들의 대략적인 실력을 가늠하기 위해 Rating에 따라 색깔과 칭호를 부여한 시스템을 나타냅니다.

Rating이 1700 이상이면 Divsion 1의 Contest에 참여 가능하며, 1700 미만이라면 Division 2의 Contest에 참여 가능합니다. Rating이 1700 이상인데 Division 2에 참가하게 되면, 번외 참가(Virtual Participation)로 취급됩니다. 그리고 해당 대회가 끝난 후에, Virtual Participation을 하더라도 그 결과가 Rating에는 반영되지 않습니다. Contest에 정상 참가하였더라도 아무 제출을 하지 않으면 결과가 Rating에 반영되지 않습니다.

Contest

Topcoder SRM과 비슷합니다. 문제는 보통 5~6문제가 출제되며, 각 문제마다 배점에 가중치가 있습니다. 대회가 시작하기 며칠 전부터 참가하고자 하는 Contest에 Registration(등록)이 가능하며, 보통 대회 시작 5~10분 전까지 등록가능합니다. Contest가 시작되면 각 문제별 배점이 점차 줄어들게 되어 최저치에 이르면 더 이상 감소하지 않게 됩니다.

대회의 문제마다 Coding Phase - Pretest - Lock / Hack - System Test의 과정을 거칩니다.

1. Coding Phase

대회가 시작되면, 각 문제들을 볼 수 있으며 제출 가능한 단계를 이릅니다.

2. Pretest

각 문제에 대해 참가자가 작성한 프로그램의 소스 코드를 제출하면, 출제진이 미리 준비한 몇 개의 데이터로 채점을 해줍니다. 만약 Pretest의 데이터들을 다 통과하였다면, 녹색 글씨로 Pretest Passed라는 Submission Result를 볼 수 있습니다. 그리고 실시간으로 Standing에서 해당 문제에 대해 받을 수 있는 점수를 받은 본인의 등수를 확인할 수 있습니다. 이미 Pretest를 통과하였는데, 본인이 제출한 답안에 생긴 문제점을 발견하였다면 다시 제출할 수 있고, 마지막으로 제출된 답안으로 System Test를 거치게 됩니다. 다시 제출하게 되면, 다시 제출한 시각에 해당되는 문제의 점수를 얻을 수 있습니다.

3. Lock / Hack

Pretest를 통과한 문제들에 대해서 Lock을 하면 다른 사람의 Pretest를 통과한 소스 코드를 보고 반례 데이터를 넣어서(Hack) 점수를 획득할 수 있습니다. 단, Lock을 하는 순간 본인은 그 문제에 대해서 답안을 다시 제출할 수 없습니다. 따라서 신중히 검토한 후에 Lock / Hack 단계에 들어가야합니다. 내가 Lock을 하지 않았다면, 다른 사람이 나의 답안을 Hack하였을 때 수정이 가능하지만, Lock을 한 이후에 Hack을 당하면 그 문제는 대회 동안은 맞힐 수가 없게 되는 것입니다.

Hack에 성공하면 100점을 얻고, 실패하면 50점이 감점됩니다.

4. System Test

대회가 종료되면, Pretest를 통과한 답안들에 대해서 수많은(약 100개에 이르는) 데이터로 검증 과정을 거칩니다. 모든 데이터를 통과하였다면 해당 제출 답안의 점수를 모두 획득할 수 있고, 통과하지 못한다면 해당 문제의 답안은 0점 처리가 됩니다.

Problem Set

Contest에는 참가하지 않더라도, 지난 대회들의 문제를 풀어볼 수 있습니다. 메인 페이지에서 상단의 PROBLEMSET을 클릭하면 문제를 풀어볼 수 있으며, 우측 하단의 'Tutorial'을 클릭하면 출제진이 작성한 해법을 볼 수 있습니다.

Virtual Participation / GYM

과거 Contest들을 보면, Contest 명칭 아래에 'Enter'와 'Virtual Participation' 버튼이 있습니다. Virtual Participation을 하게 되면, 시작 시간을 정하여 번외 참가를 해 볼 수 있게 됩니다. 번외 참가를 하는 동안은 다른 참가자들의 답안, Tutorial을 열어볼 수 없으며 실제 대회 때의 standing을 볼 수 있게 됩니다.

메인 페이지 상단에서 GYM을 클릭하면 등록되어 있는 대회들에 번외 참가해 볼 수 있습니다. GYM에 등록되어 있는 대회들은 해외 공식/비공식 대회들이며, Codeforces의 자체 Contest와는 별개입니다. 단, GYM에서는 어떤 문제만 골라서 풀어볼 수가 없으며 Virtual Participation을 할 수 밖에 없습니다.

FRIENDS

본인이 관심있는 다른 사용자들을 '친구'로 설정하여 Contest 도중 친구들의 정보를 요약하여 볼 수 있습니다.

메인 페이지에서 우측 하단에 Find User를 통해 ID를 검색하거나 특정 Contest의 Standing에서 사용자의 계정을 클릭하면 다음과 같은 프로필 화면을 볼 수 있습니다.

프로필 화면에서 별표를 누르시면, 별표가 노란색으로 바뀌는 것을 볼 수 있습니다. 그렇게 되면 친구로 정상등록이 된 것이며 과거 혹은 향후 Contest나 GYM에서 Standing을 볼 때, Friends Standing을 누르시면, 친구로 등록된 사람들의 결과(만약 참가하였다면)와 본인의 결과만을 요약하여 볼 수 있습니다. 등록할 수 있는 친구의 수에는 별도의 제한이 없는 것으로 압니다.

아래에는 제가 참가한 Contest의 친구들 결과만 본 화면입니다.(제 결과를 제외하고는 개인정보 보호를 위해 검은 박스 처리하였습니다....) 대회가 끝난 후, Standing에서 친구들이 어떻게 코딩하였는지 볼 수 있습니다. Ctrl키를 누르고 해당 제출을 클릭하면 제출 기록들이 나오며, 제출번호를 클릭하면 소스코드가 등장합니다.

이상으로 코드포스에 대한 튜토리얼 글을 끝맺겠습니다.

댓글 댓글 쓰기