본문 바로가기

일상

Codeforces 규정위반

기말 시험까지 끝나고 나서 Codeforces 대회를 계속 신청했었다. 다만 대회를 신청해놓고 까먹어서 2시간 시험 중에 1시간이 지난 다음에 기억해내고 참여해서 모든 문제를 확인하지 못하고 끝나는 경우가 많았다. 그리고 오랫동안 알고리즘 문제를 풀지 않아서 아이디어가 바로 떠오르지 않는 것도 하나의 원인이었다. 그래서 내 점수는 계속 하락하고 있었다.


나의 경우 보통 알고리즘 문제를 풀 때 ideone.com 이라는 온라인 컴파일러 환경을 많이 사용한다. 이유는 input을 텍스트 상자에 바로 입력해서 실행할 수 있어서 결과를 확인하기도 편하고 Visual Studio 와 같이 문제를 풀기 위해서 환경을 구축할 필요가 없다는 장점이 있기 때문이다.


이 글은 일요일인 12월 29일에 있었던 "Good Bye 2019" 대회에서 있었던 일이다.


이 대회에선 시간에 맞춰서 참가하였으며 평소 하던 것처럼 ideone.com 에서 소스코드를 작성하고 실행하여 결과를 확인하는 식으로 진행하였다. 시간은 3시간으로 더 길었지만 한 문제에 너무 집중을 해서 다른 문제를 풀지 못하였다. (집중한 문제는 결국 정답 처리를 받지 못했다.) 그래도 나름 만족하면서 잠을 잤던 것 같다.


그리고 아침에 일어나서 메일함을 확인하니 아래 사진과 같은 내용이 담긴 메일이 도착해있었다.

요약하면 1. 내가 제출한 코드가 다른 사람이 제출한 코드와 완벽하게 일치한다. 2. 이는 규정 위반이며, 의도하지 않았더라도 문제가 있다. 는 내용이었다.

제출한 시간을 비교해보니 약 1분 정도 차이가 있었다. 내가 ideone에서 작성한 코드를 검색엔진에서 크롤링해서 다른 사람이 그 코드를 검색해 찾아서 사용했다라는 것 빼곤 설명할 수 있는 방법이 없는 것 같다.


아무래도 내가 같은 페이지에서 코드를 수정하고 실행하는 형태로 해서 사용하는데 이전에 작성했던 코드가 검색엔진에 등록되면서 그 사람이 그 페이지를 계속 새로고침하여 코드가 수정되는 것을 확인하고 수정된 코드를 그대로 사용했다는 내용이 타당한 것 같다.


그렇다고 변수명 하나, 공백 하나 틀리지 않고 그대로 복사 붙여넣기를 한 건 흠...


정리하자면 아래와 같다.

  1. ideone.com 을 사용하는 경우 public으로 하면 안된다. 즉 그냥 로컬에서 환경을 구축해서 푸는 것이 best이다.
  2. 코드 copy는 엄격하게 금지된다.
  3. 비슷한 일이 계속 되면 계정이 정지당한다.

그런데 copy로 나온 사람은 나보다 훨씬 점수가 높은데 왜 굳이 내 소스 코드를 그대로 가져다 썼는지 궁금하기도 하고, 그렇게 소스 코드를 copy를 검출하기 위해서 어떤 식으로 구현을 했는지도 궁금하다.


만약 내가 설계를 했다면 아마 소스 코드에서 공백을 모두 제거하고, sha256으로 해싱한 결과들을 비교하는 형태로 구현했을 것 같다. 다만 이렇게 구현하더라도 결국 시간 복잡도가 $O(N^2)$ 이라 사람들이 많아질수록 시간이 오래 걸릴텐데 이러한 문제를 어떻게 해결하는지 궁금하다.