코드를 제출했는데 시간 초과를 받으면 보통 "이 코드가 그렇게 비효율적인가?" 하고 생각하게 됩니다. 물론 알고리즘의 효율성, 특히 시간 복잡도를 계산하는 것은 코드를 작성하기 전부터 당연히 최우선으로 해야 하는 일이지만 '시간 초과'가 의미하는 것은 항상 '효율성'이 나쁘다는 것을 의미하지는 않습니다. 시간 초과에서 매우 큰 비중을 차지하는 것 중 하나는 바로 코드가 무한 루프를 도는 경우입니다.
문제 풀이에 쓰이는 코드는 반드시 정답을 출력한 후 정상적으로 종료가 되어야 합니다. 만일 더 받을 입력이 없는데도 불구하고 루프를 계속 돌면서 입력을 받고 있다면 그 코드는 높은 확률로 시간 초과나 출력 초과, 혹은 런타임 에러를 받게 됩니다. 이런 경우가 발생하는 대표적인 경우는 입력의 끝 (EOF)을 판별해야 하는 문제에서 이를 올바르게 처리하지 못하고 제대로 EOF를 입력해보는 테스트를 해보지 않아 프로그램이 올바르게 종료되는 것을 확인하지 않고 제출하는 것이 있습니다. 대표적인 문제로 A+B - 4나 그대로 출력하기가 있습니다.
그 외에도 코드에 오타를 내어 올바른 로직대로 동작하지 못해 무한 루프에 빠지게 되거나, undefined behaivor에 의해 무한 루프를 돌게 되는 경우 등이 대표적인 케이스들입니다. 단순히 내 로직에 결함이 있는지만 체크하는 것을 넘어서, 코드 자체가 그 로직을 올바르게 구현했는지도 꼼꼼하게 체크하는 연습을 해봅시다.
'PS > 자주 하는 답변' 카테고리의 다른 글
반례에 의존하지 마세요. (3) | 2023.06.15 |
---|---|
이 코드 그대로 내니 맞았습니다. (0) | 2023.05.23 |
atoi에 char 변수의 주소를 넣으면 안 됩니다. (0) | 2023.05.09 |
Undefined Behavior가 있으면 무슨 일이 일어나도 이상하지 않습니다. (2) | 2023.04.18 |
퀵정렬은 제곱입니다. (0) | 2023.03.24 |