페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.

채점 시스템은 Google Cloud에서 작동되며, 운영체제는 Ubuntu 22.04 LTS 입니다. 아키텍처는 AMD64 입니다.

채점 시스템의 메모리 할당량은 문제에 따라 가변적입니다. 문제의 제한 메모리가 높을 경우 더 높은 메모리를 가진 채점기가 할당됩니다. 그러나, 각 서버의 CPU 성능은 동일합니다.

각 채점 서버는 동시에 한 개의 채점만 수행합니다. 즉, 동시 채점 횟수가 많아져도 채점기의 성능에는 영향이 없습니다. 채점 서버의 개수는 유동적입니다.

컴파일을 위해서 다음과 같은 옵션을 사용합니다:

  • C : gcc Main.c -o Main -O2 -Wall -lm --static -std=c11 -DONLINE_JUDGE

  • C++ : g++ Main.c -o Main -O2 -Wall -lm --static -pipe -std=c++17 -DONLINE_JUDGE

  • Java : javac --release 11 -J-Xms1024m -J-Xmx1920m -J-Xss512m -encoding UTF-8 Main.java

  • Python : python Main.py -m compileall -b

  • PyPy3 : pypy3 Main.py -m compileall -b

  • GO : go build Main.go

  • Lua : luac5.3 -p Main.lua

  • Ruby : ruby -c Main.rb

  • Typescript : tsc Main.ts

각 컴파일러와 런타임의 버전은 다음과 같습니다:

  • gcc/g++ : gcc/g++ 12.1.0

  • Java : openJDK 17.0.5

  • Python : Python 3.10.6

  • PyPy3 : PyPy 7.3.9 (Based on Python 3.8.13)

  • GO : Go 1.18.1

  • Lua : Lua 5.3.6

  • Javascript : node 18.12.1

  • Typescript : Typescript 4.5.5

  • 채점을 위해서 입력은 stdin(Standard Input)을 통해 받게 되며, stdout(Standard Output)에 출력하게 됩니다.

  • C/C++의 경우 입력을 위해서는 'scanf(C)/cin(C++)'을, 출력을 위해서는 'printf(C)/cout(C++)'을 사용하게 됩니다.

  • 사용자가 작성한 프로그램은 파일을 읽고 쓰는 것이 금지되어있으며, 이러한 경우, 런타임 에러를 받게 됩니다.

  • 입출력 파일(데이터)는 공개되지 않습니다. 예제는 데이터 중 일부에 불과하므로, 입출력의 형식을 확인하고 검토하는 용도이지 정답을 보장하지 않습니다.

  • 줄바꿈이나 띄어쓰기 등 예제 형식 그대로 입력받아야 합니다.

  • 줄바꿈이나 띄어쓰기 등 예제 형식 그대로 출력해야 합니다. (대부분 각 줄의 맨 끝에 공백을 넣어도 되고 안 넣어도 되며, 출력의 맨 끝에 줄바꿈을 넣어도 되고 안 넣어도 됩니다.)

  • 입력을 다 받고 출력을 할 필요는 없습니다. 입력과 출력을 번갈아가면서 해도 괜찮습니다.

  • 채점 중

    • 채점이 진행되고 있음을 뜻합니다.

    • 채점 진행률은 전체 테스트 데이터 중 몇번째를 채점하고 있는지 보여줍니다.

  • 정답!

    • 제출한 코드가 모든 테스트 데이터를 통과했음을 뜻합니다.

  • 오답

    • 제출한 코드가 테스트 데이터를 통과하지 못했거나 부분적으로 통과했음을 뜻합니다.

    • 점수는 모든 테스트 데이터를 채점하고 난 후의 최종 점수입니다.

    • 채점 결과에서 보여주는 예제 입출력 정보는 첫번째로 틀린 데이터를 보여줍니다.

  • 시간 초과

    • 제출한 코드가 제한된 시간 내에 끝나지 않은 경우입니다.

    • 시간 제한을 초과하면 실행을 중단하기 때문에 정답인지 오답인지 알 수 없습니다.

  • 메모리 초과

    • 제출한 코드가 허용된 메모리보다 많은 메모리를 사용했을 경우입니다.

  • 런타임 에러

    • 실행 도중에 에러가 발생하여 프로그램이 종료된 경우입니다.

    • 런타임 에러의 종류에는 'segmentation fault', 'floating point exception', 'used forbidden functions', 'tried to access forbidden memories' 등이 있습니다.

    • 채점 결과를 클릭하면 실제 에러 메시지를 볼 수 있습니다.

  • 컴파일 에러

    • 컴파일에 실패한 경우입니다.

    • 경고 메시지(warning message)는 에러 메시지로 간주하지 않습니다.

    • 채점 결과를 클릭하면 실제 에러 메시지를 볼 수 있습니다.

채점 테스트 데이터는 정책 상 기본적으로 공개하지 않습니다.

하지만 오답이나 특정 런타임 에러의 경우, 사용자의 디버깅을 위해 입출력 데이터를 공개 또는 일부 공개합니다.

특히 데이터의 값이 큰 경우에는 해당 데이터의 일부만 공개합니다.

 

해당 정책은 언제든지 사전 공지없이 변경될 수 있습니다.

일반적으로 MS-VC++를 사용하였을 경우에 발생하며, GNUMS-VC++에서 생기는 차이점에 의하여 발생합니다.

예를 들면 다음과 같습니다. 

  • GCC/G++에선 main이 반드시 int형으로 선언되어야 하며, void main을 사용하게 되면 컴파일 에러를 받게 됩니다.

    "for (int i=0...)..."와 같이 for문 안에 int변수를 선언하였을 경우, block을 벗어났을 때 i 변수는 사라지게 됩니다.

  • itoa 는 ANSI에서 규정한 표준 함수가 아닙니다.

    VC에서 __int64는 ANSI 표준이 아닙니다. 하지만 64비트 integer 변수를 사용하기 위해 long long을 사용할 수 있습니다.

  • Java의 경우 class의 이름은 Main 으로 해주세요.

    public class Main {

"제 컴퓨터에서는 잘 나오는데 / Visual Studio에서는 잘 되는데 / 예제는 잘 되는데 / 결과값이 똑같은데 / 로컬에서는 잘 되는데" 등등,

~에서는 잘 되는데 틀리는 경우는 거의 없습니다. (물론 아주 드물게 틀리는 경우도 있지만 최대한 빠르게 수정됩니다.)

 

전체 테스트 데이터의 극히 일부인 예제만으로 정답 코드라고 확신하는 것은 섣부른 판단입니다. 

대부분의 경우 채점 환경이 아닌 본인의 코드에서 문제점을 찾아보셔야 합니다.

표준을 따르지 않아 컴파일러에 따라 다른 결과가 나올 수 있는 문법 사용, 널 문자의 처리 등 본인의 코드에서 문제점을 찾아보는 습관이 필요합니다.

 

예를 들어,

일부 컴퓨터에서는 널 문자가 공백으로 출력되는데, 널 문자와 공백은 엄연히 다릅니다.

따라서 널 문자를 출력하지 말아야 하는데 (공백으로 보이는) 널 문자를 출력하면 오답입니다.

 

또 다른 예로는 로컬에서는 잘못된 메모리를 참조해도 허용하는 경우가 있는데,

채점 서버에서는 허용하지 않기 때문에 런타임 에러가 나옵니다.