• 채점
  • 채점 정보

채점 환경

  • AWS EC2를 사용합니다.
    • 인스턴스 타입: c4.large
    • 프로세서: Intel Xeon E5-2666v3
    • 클럭: 2.9 GHz
    • 메모리: 3.75 GiB
    • 프로세서 아키텍쳐: 64-bit
  • OS: Ubuntu 16.04.7 LTS

컴파일 또는 실행 옵션, 컴파일러 버전

채점 방식

입력은 Standard Input(stdin)에서 받아야 하고, 출력은 Standard Output(stdout)에 해야 합니다.

문제 별로 준비되어 있는 데이터 파일을 하나씩 넣어서 실행해보고 그 출력 파일과 미리 구해 놓은 정답 파일과 비교합니다.

문제의 출력 형식을 지키지 않으면, 틀리게 됩니다. 예를 들어, N과 M을 입력하세요.와 같은 메시지를 화면에 출력하는 것 입니다.

Standard Error(stderr)에 출력을 하면 를 받게 됩니다.

스페셜 저지 문제의 정답이 여러가지인 경우에는 스페셜 저지로 채점을 하게 됩니다. 스페셜 저지는 유저가 출력한 답을 검증하는 코드를 통해서 정답 유무를 결정하는 방식입니다.

채점 서버

1개의 채점 서버는 한 번에 최대 1개의 제출만 채점합니다. 이전 채점의 채점이 모두 끝난 이후에만 새로운 채점을 시작합니다.

채점 서버의 수는 유동적이며, 채점 서버와 큐 상태 또는 디스코드 #채점-서버 채널에서 확인할 수 있습니다.

채점 결과

  • : 채점을 기다리는 중입니다. 기다리면 채점 결과를 받을 수 있습니다.
  • : 재채점을 기다리는 중입니다.
  • : 채점 프로그램이 채점을 하기 위해 여러가지 작업을 수행하는 중 입니다. 소스 코드 컴파일, 실행 환경 세팅 등이 포함됩니다.
  • : 채점을 하는 중입니다.
  • : 제출한 프로그램이 준비된 데이터를 모두 맞은 경우에 받게 됩니다.
    • : 획득한 최고 점수가 문제의 총점이 아닌 경우입니다. 를 클릭하면 상세 결과를 볼 수 있습니다.
      • 점수전체 채점의 경우 최고 점수가 아니더라도 를 받을 수 있습니다. 이때 기준은 문제의 하단에 적혀있습니다.
  • : 답을 올바르게 구했으나, 문제에 나와있는 출력 형식과 다른 경우입니다. 다음은 이 결과를 받게 되는 일부 예시입니다.
    • 줄 앞에 의미 없는 공백을 출력하는 경우. 줄 뒤의 공백은 무시하고 채점합니다. 예를 들어, "1 2"를 출력해야 하는 경우에 "1 2""1 2 "를 받게 됩니다. " 1 2"는 첫 문자가 공백이라서, "1  2"는 두 수를 공백 두 칸으로 구분했기 때문에, 를 받게 됩니다. 여기서 "는 공백을 보기 위해 편의상 삽입한 기호입니다.
    • 의미없는 빈 줄을 삽입하는 경우. 예를 들어, 1부터 N까지 한 줄에 전부 공백으로 구분해서 출력하는 경우에 1부터 N까지 한 줄에 전부 공백으로 구분해서 출력하는 경우는 를 받게 됩니다. 이것은 사이트가 생겼을 때부터 있던 채점 시스템의 버그이며, 계속해서 허용할 예정입니다. 각 줄의 사이에 빈 줄을 출력하는 경우에는 를 받게 됩니다.
  • : 출력 결과가 정답과 다른 경우입니다.
  • : 프로그램이 제한된 시간 이내에 끝나지 않은 경우입니다. 시간 제한을 초과하면 실행을 즉시 중단합니다. 따라서, 정답이 맞았는지 틀렸는지는 알 수 없습니다.
  • : 프로그램이 허용된 메모리보다 많은 메모리를 사용한 경우입니다. 와 마찬가지로, 메모리 제한을 초과하면 실행을 즉시 중단합니다.
  • : 프로그램이 너무 많은 출력을 하는 경우에 발생합니다. 이 결과는 와 같은 의미를 갖습니다. 정확하게는 미리 구해놓은 정답 파일 크기의 2배를 넘어가면 이 결과를 받게 됩니다. 만약, 출력하는 부분이 무한 루프에 빠진 경우, 시간을 초과하기 전에 를 받을 수 있습니다.
  • : 프로그램이 비정상적으로 종료한 경우입니다. Exit code가 0이 아닌 경우, segmentation fault를 받은 경우가 대표적입니다.
  • : 컴파일에 실패한 경우입니다. 경고(Warning)가 있어도 컴파일에 성공하면 이 결과를 받지 않습니다. 를 클릭하면 컴파일 에러 메시지를 볼 수 있습니다.
  • : 채점을 할 수 없는 경우입니다. 주로 예전에는 채점을 할 수 있는 언어였지만, 지금은 채점을 할 수 없는 경우에 이 결과를 받게 됩니다.
  • : 여러가지 이유에 의해서 삭제된 제출입니다.

채점 데이터

채점 데이터는 공개하지 않습니다.

채점 데이터의 개수, 채점 데이터 순서는 모두 공개하지 않습니다.

페이지에 나와있는 예제는 채점할 수도 있고, 채점하지 않을 수도 있습니다. 문제마다 다르게 값이 설정되어져 있으며, 기본값은 예제 채점입니다.

문제의 출처에 채점 데이터가 있는 경우, 이 데이터를 사용할 수도 있고 사용하지 않을 수도 있습니다. 채점 데이터는 공식 데이터와 다를 수도 있습니다.

채점 데이터 순서

채점 데이터 순서는 문제마다 다릅니다. 기본값은 입력 데이터 크기의 내림차순입니다. 데이터 순서는 아래와 같이 3가지가 있습니다.

  1. 입력 데이터 크기의 내림차순, 같은 경우에는 파일명의 오름차순
  2. 입력 데이터 크기의 오름차순, 같은 경우에는 파일명의 오름차순
  3. 랜덤

순서는 공개되지 않으며, 변경되더라도 변경 사실을 알리지 않습니다.

데이터의 추가/삭제/변경

일부 문제는 데이터 형식이 문제의 입력 형식과 다를 수도 있습니다. 이를 확인하면 데이터를 모두 수정후 재채점하고 있으며, 이런 일이 벌어지는 이유는 다음과 같습니다.

예전에는 프로그래밍 대회에서 사용할 수 있는 언어가 대부분 C, C++, Pascal 이었습니다. 이 세 언어는 데이터의 형식을 엄격하게 지키지 않아도 올바르게 입력을 받을 수 있습니다. 예를 들어, 다음 세 가지 입력 형식은 모두 같은 소스 코드로 입력받을 수 있습니다.

  • 총 N개의 줄에 정수가 하나씩 주어진다.
  • 첫째 줄에 N개의 정수가 공백 한 칸으로 구분되어져 있다.
  • N개의 정수가 주어진다. 정수는 공백, 빈 칸, 탭으로 구분되어져 있으며, 그 개수는 한 개 이상이며, 섞여있을 수도 있다.

따라서, 입력 형식을 완벽하게 지키지 않아도 입력을 받는데는 큰 문제가 없는 경우가 많기 때문에 이렇게 입력 형식을 엄격하게 지키지 않는 경우가 발생합니다.

다른 이유로는 데이터를 만들 때 부주의한 경우가 있습니다.

C++을 이용해서 "첫째 줄에는 자연수의 개수 N, 둘째 줄에는 N개의 정수가 공백 한 칸으로 구분되어져 있는 데이터"는 다음과 같은 소스 코드로 만들 수 있습니다.

위와 같은 코드로 데이터를 만들면, 둘째 줄의 마지막 문자는 공백이 됩니다.

둘째 줄을 한 줄을 입력받고, 공백으로 나눠서 배열로 만들고, 배열의 각 값을 정수로 파싱하는 방식을 입력을 받을 수 있습니다. 하지만, 이 경우에는 배열의 마지막 값이 빈 칸이기 때문에, 정수로 변환할 수가 없어 를 받게 됩니다.

이런 경우는 데이터 제작자의 잘못이기 때문에, 게시판을 통해 제보하면, 수정해서 재채점을 하게 됩니다.

위의 데이터를 올바르게 만드는 C++ 코드는 아래와 같습니다.

를 받아야 하는 소스인데 를 받은 경우 게시판을 통해 제보하면, 수정 또는 삭제해서 재채점을 하게 됩니다.

를 받아야 하는 소스인데 를 받은 경우 게시판을 통해 추가할 데이터와 함께 제보하면, 추가해서 재채점을 하게 됩니다.

기타

데이터는 문제에 나와있는 조건을 항상 지킵니다. 따라서, 입력을 검증할 필요는 없습니다.

랜덤 방지 같은 데이터를 3번 채점한 결과가 다르면 를 받는 문제입니다.

번외 유저의 맞은 문제, 제출, 정답 비율을 계산할 때 포함하지 않는 문제입니다. 통계 도움말을 참고하세요.

채점 준비 중 채점 준비 중 문제는 데이터가 없거나, 볼 수만 있는 문제라서 채점을 할 수 없는 경우입니다. 단, 문제 본문은 볼 수 있습니다.

삭제 삭제 문제는 데이터가 없거나, 본문 업로드가 아직 되지 않은 문제입니다. 데이터를 만들거나, 문제 본문을 업로드하면 공개됩니다.