안녕하세요!
첫 번째 모의고사를 치루시느라 다들 고생 많으셨습니다! 1차 코딩테스트는 [종합IT서비스기업] 2016년도 코딩테스트 기출문제를 바탕으로 제작되었습니다. 실제 기출 문제를 기반으로 문제 설명과 일부 채점 데이터를 보강하여 진행하였으며, 문제 난이도는 평이한 수준이라고 볼 수 있습니다.
하지만 본 기출 문제를 리뷰하면서 저는 입력되는 값들의 범위를 중요하지 않은 것처럼 가볍게만 언급하고 넘어간다는 점을 주목했습니다. 많은 분들이 이 부분을 간과할 것이라고 예측했는데,
적중했습니다!
아래에 첨부한 도표는 각 응시자의 백분위별 획득 점수를 나타내며, 각 획득 점수는 문항별 획득 점수의 누적으로 표현했습니다.
* 단, 전체 응시자 중 제출이 전혀 없는 참가자는 제외한 결과입니다.
위의 도표로 알 수 있는 결과의 주목 할 점은 아래와 같습니다.
- 점수 분포가 상당히 고른 선형으로 되어 있습니다.
- 문항별 난이도가 급격하게 변하지 않았다는 사실을 알 수 있습니다.
- 문항별로 만점자보다 부분 점수를 다양하게 획득한 참가자가 많았음을 의미합니다. 즉, 전체 테스트케이스에서 놓치기 쉬운 예외 케이스가 많았다는 이야기가 됩니다.
- 총점으로 보아도, 문항별로 보아도 동점자의 수가 적습니다.
- 문제들 자체는 간결하게 설명되어 있지만, 그렇기에 오히려 수 많은 예외적인 케이스가 존재합니다.
- 참가자마다 놓친 부분들이 다르기에 점수가 서로 다르게 퍼져있는 점을 알 수 있습니다.
나는 무엇을 놓쳤나?
필자 또한 많은 문제를 풀고 대회를 참가해보며 뼈저리게 느낀 점이 하나 있습니다. 몸소 느끼기 전까지는 와닿지 않을 수 있지만, 이 기회에 꼭 유념하시고 시험에 응하셨으면 합니다.
"문제 설명이 짧고 간결하다면 경계해라"
문제가 짧고 간결한 것이 항상 좋은 것만은 아닙니다. 간결해서 가독성은 좋지만 이는 다른 참가자에게도 마찬가지입니다. 오히려 문제에 많은 내용과 제약사항이 명시되어 있다면 그 표현들 하나하나가 힌트이기에 풀이가 더 쉬울 수 있습니다. 바로 다음과 같은 힌트를 얻을 수 있죠.
- 입력 값은 어떤 특징이 있는지
- 중복이 있는지/없는지
- 정렬되어서 들어오는지
- 정수형 변수로 저장을 할 수 있지 등등
- 계산 과정에서 예외적으로 처리해주어야 할 부분이 있는지
- 그 외 여러 힌트
하지만 문제가 짧으면 이런 내용들이 생략되기 마련이고, 특수하지 않은 일반적인 케이스들이 입력으로 골고루 주어지게 됩니다. 하지만 대부분의 사람들은 문제에 명시되어있지 않은 내용을 자신이 처리하기 편한 방향으로 생각해버리는 경향이 있습니다(즉, 만점받기 쉽지 않다는 이야기죠).
- 입력 예제 숫자들이 정렬되어 있다고 해서 입력이 항상 정렬되어 있다고 생각한다
- 문제 설명에서 양수만을 사용 했으니까 입력도 양수만 들어온다고 생각한다
- 등등...
그렇기에 많은 훈련이 필요합니다. 유사한 문제에서 중요하게 처리해야 할 예외적인 경우는 무엇이 있었는지, 그런 내용들이 생략되어 있는지 등을 판단할 수 있어야 하기 때문입니다. 앞서 언급한 것처럼 이번 시험은 문항별 만점자 수가 적고, 많은 분들이 여러 테스트케이스를 조금씩 놓쳤습니다. 그렇기에 각 문제에 대한 해설은 이 부분에 초점을 맞추어서 진행하고자 합니다.