나의 현재 경험과 반 친구들이 겪은 문제를 바탕으로 이 기사에서는 NOJ 문제에서 자주 발생하는 오류와 해당 솔루션을 요약합니다.
다른 오류 메시지가 나타나면 번호 순서에 따라 하나씩 신속하게 문제를 해결할 수 있습니다.
WA
- 출력 형식 오류: 샘플에 필요한 출력 형식을 주의 깊게 확인하여 출력이 더 많거나 적는지 확인하세요. 출력 내용이 많을수록 OE여야 하지만 현재는 WA로 메시지가 표시됩니다.
- 알고리즘 오류: 테스트할 샘플을 찾습니다. 주로 알고리즘이 문제 해결 목표를 달성하지 못하기 때문이지만 입력 읽기 오류도 포함됩니다(문제 입력 형식을 올바르게 읽을 수 없으며 입력 범위가 고려되지 않음). 초기화가 필요합니다. 초기화되지 않았습니다. 입력 또는 출력 형식 문자가 일치하지 않습니다. 유형이 잘못되었습니다.
- 극단값은 고려되지 않습니다. 0으로 나누기 모듈로 0 연산, 알고리즘 실패를 유발할 수 있는 일부 특수 값 등 가능한 극단값을 테스트합니다.
- Out-of-bounds : 위의 오류가 제거된 후, 문제에 입력 범위가 주어지지 않고, 더 작은 표본이라도 맞다면 변수는 out-of-bound로 간주됩니다.
이것
- 구문 오류(
좋은 IDE가 필요할 수 있음): CB는 많은 문법 오류를 보고하지 않습니다. - 헤더 파일이 없습니다. 호출된 라이브러리 함수와 매크로를 확인하세요.
- 비표준 사용법: 비표준 라이브러리 도입 등. (
동급생의 코드가 실제로 windows.h를 사용하는 것을 봤습니다) - 스택 오버플로: 재귀가 너무 깊으면 함수에서 큰 배열이 열립니다. 일반적으로 ME여야 하지만 현재 일부 프롬프트는 CE입니다.
- 무한 루프: 디버깅 루프 구조, 일반적으로 TE여야 하지만 현재 일부 프롬프트는 CE입니다.
- 메모리 누수: 포인터를 잘못 사용했습니다.
- 제한된 함수 호출: 예를 들어, rand()가 반복적으로 호출될 때 srand(time(NULL))은 사용되지 않습니다. 이는 매우 드뭅니다.
답장
- 불법 메모리 액세스: 범위를 벗어난 배열, 와일드 포인터 호출, 시스템 예약 메모리 액세스 등
- 스택 오버플로: 이전과 동일하며 일반적으로 ME여야 하지만 현재 일부 프롬프트는 RE입니다.
- 메모리 누수: 위와 동일합니다.
- 무한 루프: 이전과 동일하며 일반적으로 TE여야 하지만 현재 일부 프롬프트는 RE입니다.
- 모듈로 0 또는 0으로 나누기: 현재 프롬프트는 WA입니다.
그만큼
- 무한 루프
- 알고리즘을 최적화해야 합니다: 알고리즘의 시간 복잡도를 추정합니다. 일반적으로 OJ 시간 판단 기준은 다음과 같습니다(예: 1000ms).
- 시간 초과되지 않음