Codility 테스트: 점수가 실제로 의미하는 것
대부분의 사람들은 Codility 테스트에서 통과했다고 생각하고 실패합니다. 과제 설명에 있는 예제들은 모두 정답을 출력했고, 에디터는 OK를 표시했으며, 제출도 성공했지만—보고서는 40% 점수만을 보여줍니다. 이유는 간단합니다. 시험을 보기 전에 꼭 알아두어야 할 점은, 여러분이 볼 수 있는 예제들은 점수에 포함되지 않는다는 것입니다.
점수는 실제로 어떻게 구성되는가
각 과제는 두 개의 별도 축을 기준으로 채점되며, 결과도 각각 별도로 보고됩니다.
- Correctness — 출력이 기대값과 일치하는 숨겨진 테스트 케이스의 비율입니다. 각 과제는 최소 6개의 평가 케이스를 실행하며, 과제 점수는 통과한 케이스의 비율(%)입니다. 설명에 표시된 예제들은 시연용이며, 평가 대상 케이스가 아닙니다.
- Performance — 입력이 커짐에 따라 해결책이 시간 및 메모리 제한 내에 머무는지 여부입니다. 이는 확장성이 점수에 포함되는 과제에만 적용되며, 답이 모두 정답이더라도 성능에 대해 채점됩니다.
두 번째 축이 바로 사람들이 준비하지 못하는 부분입니다. O(n log n)으로 설계된 과제에서 O(n²) 루프가 모든 케이스를 올바르게 해결하더라도, 큰 입력에서는 시간 초과가 발생해 대부분의 성능 점수를 잃게 됩니다.
제약 조건을 복잡도 예산으로 읽어라
제약 조건 블록은 장식이 아닙니다. 과제가 허용하는 복잡도를 알려주는 부분이며, 페이지에서 가장 유용한 정보입니다.
- N up to 100,000 or more — N이 100,000 이상 — 2차 시간 복잡도는 시간 초과됩니다. 정렬, 해시 맵, 투 포인터, 혹은 prefix sum과 같은 방법을 요구하는 것입니다.
- N up to a few thousand — N이 몇 천 정도 — 보통 O(n²)도 괜찮으며, 더 복잡한 방법을 쓰면 다른 곳에 쓸 시간을 낭비하게 됩니다.
- Values up to 2 billion — 값이 20억까지 — 32비트 누산기가 오버플로우될 수 있음을 의미합니다. 해당 언어에서 이 문제가 중요하다면, 여기서도 중요합니다.
코드를 한 줄 쓰기 전에 목표 복잡도를 먼저 계산하세요. 자동 채점 테스트에서는 구현하지 않은 좋은 직관에 대해 점수를 받을 수 있는 사람이 없습니다.
점수가 실제로 어디로 가는가
점수 손실의 대부분은 세 가지 패턴 때문이며, 이들은 알고리즘 실력과는 무관합니다.
- 아무도 테스트하지 않은 엣지 케이스. 빈 입력, 하나의 요소, 모든 요소가 동일함, 허용되는 최소값 및 최대값. 이들이 바로 숨겨진 케이스이며, 작성하기 가장 비용이 적기 때문입니다.
- 경계에서의 오프 바이 원. 포함 구간과 제외 구간 차이는 어떤 데이터 구조보다도 더 많은 Codility 점수를 소모합니다.
- 3번째 과제에서 시간 초과. 타이머는 각 과제가 아니라 전체 테스트에 적용됩니다. 모든 과제에 동작하는 brute force를 남겨두는 사람은 하나의 완벽한 풀이와 두 개의 빈 풀이를 낸 사람보다 점수가 높습니다.
부분 점수도 실제로 존재하니 활용하라
점수가 케이스 비율로 매겨지기 때문에, 정직한 brute force는 빈 에디터보다 훨씬 높은 점수를 얻습니다. 시간 압박 하에서 가장 높은 점수를 받는 흐름은 거의 언제나 동일합니다: 명백한 풀이를 작성하고 제출한 뒤, 최적화하고 다시 제출합니다. 먼저 점수를 확보하고, 그 다음에 개선하는 것이죠.
해당 풀이가 너무 느리다는 걸 알고 수정할 수 없으면 그대로 두세요. 대형 케이스에서 타임아웃이 나더라도 통과한 모든 소형·중형 케이스 점수는 획득됩니다.
마지막 10분
새 코딩은 그만두세요. 각 과제를 빈 입력, 하나의 요소, 그리고 제약 조건이 허용하는 가장 큰 값으로 각각 한 번씩 실행해 보세요. 이 한 번의 실행이 어려운 과제에 네 번째 시도하는 것보다 더 많은 점수를 얻으며, 소요 시간은 3분입니다.
추후에 알게 되는 것보다 미리 알아두면 좋은 점: 플랫폼은 탭 내에서 일어난 모든 행동—포커스 전환, 붙여넣기 등—을 기록하고, 고용주는 점수 옆에 그 요약을 확인합니다. 테스트는 다른 창을 뒤섞어 조립하는 것이 아니라, 앉아서 끝내는 형태로 계획하세요.
FAQ
과제에 있는 예시가 내 Codility 점수에 반영되나요?
아니요. 문제에 제시된 예시는 단지 설명용일 뿐입니다. 점수는 숨겨진 평가 테스트 케이스 중 통과한 비율로 산정되므로, 모든 예시를 처리해도 점수가 낮을 수 있습니다.
통과 기준 Codility 점수는 어떻게 되나요?
통일된 합격 점수는 없습니다—채용 기업이 기준을 정합니다. 실제로 대부분의 기업은 여러 과제의 전체 비율과 성능 점수가 의도된 복잡성을 인식했는지를 함께 평가합니다.
이전 과제로 돌아갈 수 있나요?
대부분의 Codility 시험 설정에서는 가능합니다. 전체 시험이 하나의 타이머를 공유하므로 시간이 남아 있는 한 과제 간 이동이 허용됩니다. 그래서 초기에 완전 탐색으로 구현해두고 나중에 최적화하는 전략이 효과적인 것이죠.
Codility가 탭 전환이나 붙여넣은 코드를 감지하나요?
플랫폼은 포커스 전환과 대량 붙여넣기를 기록해 점수와 함께 고용주에게 보고합니다. 자동으로 실패 처리되지는 않지만, 보고서를 보는 사람은 해당 요약을 확인할 수 있습니다.