BOJ 재채점은 너무 귀찮아

재채점은 하지 않는 것이 가장 좋지만, 다음과 같은 이유 때문에 일어나게 됩니다.

  1. 데이터 추가
  2. 데이터 삭제
  3. 데이터 수정
  4. 채점 환경 업데이트로 인한 시간 제한 수정
  5. 스페셜 저지의 추가 및 수정
  6. 채점 시스템 오류

여기서 가장 많이 등장하는 이유는 데이터 추가입니다. 테스트 케이스를 이용해 채점하는 방식의 특성상 틀린 솔루션이 통과하는 경우가 생기는 경우가 존재합니다. 이 때, 데이터를 다시 추가해 전체 제출된 솔루션을 재채점하게 됩니다.

데이터 삭제는 주로 문제의 제한과 맞지 않는 잘못된 데이터가 추가되어 있는 경우에, 데이터 수정은 데이텨의 형식 오류가 있었을 때 주로 발생합니다. C++의 경우에는 정수의 끝에 공백이 있거나 “5 6 ” 한 줄에 걸쳐서 주어져야 하는 두 정수가 두 줄에 걸쳐서 주어지는 경우 모두 올바르게 입력받을 수 있습니다. 하지만, Java나 Python과 같은 언어의 경우에는 문제의 입력 형식과 조금이라도 올바르지 않으면 런타임 에러를 발생시킬 수가 있습니다.

채점 환경 업데이트로 인한 시간 제한 수정은 채점 컴퓨터의 사양이 어쩔수 없이 업데이트되는 경우에 발생합니다.

5번과 6번은 거의 발생하지 않기 때문에, 설명을 생략합니다.

재채점이 이루어진 경우에 재채점으로 인한 변화는 유저에게 통보해야 합니다. 따라서, 다음과 같은 상황이 발생하게 됩니다.

만약 통보가 없다면, 그냥 채점 결과를 “재채점을 기다리는 중“으로 바꾸고, 완료될 때 까지 조용히 기다리면 됩니다. 통보를 포함한 재채점을 위해서는 현재는 다음과 같은 과정을 거쳐야 합니다.

  1. 재채점을 수행할 채점 서버를 실행
  2. 채점 메인 서버에서 데이터를 변경
  3. 채점 메인 서버에서 전체 채점 서버로 데이터를 전송
  4. 재채점 서버로 SSH 접속을 해 재채점 스크립트를 실행
  5. 재채점이 모두 완료된 것을 확인한 후, 홈페이지에서 재채점 완료 작업을 진행
  6. 재채점된 결과를 이용해 유저에게 알림을 전송

위의 과정은 규모가 작은 경우 (재채점해야 할 솔루션의 개수가 1000개 이하 정도되는 규모) 에는 큰 문제가 없습니다. 로또와 같은 문제를 제외한 나머지 BOJ 문제 중에서 제출의 수가 가장 많은 문제는 1000번 A+B 문제로 2018년 2월 19일 현재 제출 수가 99475개 입니다. 솔루션 하나 당 채점을 하는데 걸리는 시간이 1초라고 가정하면, 전체를 재채점하는데 걸리는 시간은 99475초는 27시간이 걸리게 됩니다.

이런 재채점 방식은 아래와 같은 문제가 발생하게 됩니다.

  1. 재채점은 채점보다는 급하지 않는데, 채점 서버 1대를 배정하는 것은 비용 비효율적
  2. 채점이 줄어드는 새벽시간대에 놀고 있는 채점 서버의 비용이 아까움
  3. 현재 채점 프로그램의 비효율성 때문에, 채점 서버가 늘어나면 채점 프로그램이 매우 느려지게 됨 (업데이트 예정)
  4. 재채점이 완료되었다는 사실을 사람이 직접 알아차려야 함.
    1. 위의 재채점 단계에서 5, 6번은 4번이 완료되었다는걸 눈으로 확인한 후에 진행해야 함
    2. 그 전까지는 채점 서버를 모두 켜놓고 있어야 함

시간대별로 제출이 얼마나 차이가 있는지 알아보기 위해 다음과 같은 차트를 그려봤습니다. (0:00은 0:00~0:59를 나타내며, 나머지 시간도 마찬가지)

chart.png

2018년 2월 13일은 채점 번호 7777777 이벤트 때문에, 다른 추세를 보입니다.

시간대별로 봤을 때, 최대 제출 수는 최소 제출 수의 평균 31배정도의 차이가 납니다. 가장 좋은 방법은 채점수에 따라서, 채점 서버의 수를 조절하는 방식이지만, 귀찮기 때문에 또다른 변수 때문에 채점 서버는 수동으로 관리하기로 했습니다. 또다른 변수에 대해서는 다른 포스팅으로 글을 남기기로 했습니다.

결국 놀고있는 채점 서버를 이용해 재채점을 진행한다면, 채점이 느려지는 경우를 막을 수 있고, 서버 비용을 아낄 수 있게 됩니다.

따라서, 이와 같이 재채점을 방식을 업데이트하게 되었고, 앞으로는 채점이 밀리는 현상 없이 재채점을 진행할 수 있게 되었습니다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

About Baekjoon

스타트링크 블로그에서 지루한 글을 담당하고 있습니다!