본문 바로가기

알고리즘

[삼성 코딩 테스트] 코딩테스트 잘보는법, 자주 실수하는 유형(C++)

이번 글에서는, 코딩 테스트에 대비하여 자주 실수하는 유형에 대해서 소개해드리겠습니다.

제 경험을 기준으로 설명드리는 것이라서, 추가하고 싶은 내용이 있으면 댓글 달아주시면 감사하겠습니다.

시험 전에 읽으시면 많이 도움이 될 '자주 실수하는 유형들'입니다.

 

인덱스 에러

 

for문 내부에서 자료 구조를 이용한 탐색을 진행할 때 발생할 수 있다. 채점 시 런타임 에러라고 발생한다. for문을 사용할 때 내부에서 사용하고 있는 인덱스와 for문에 선언한 인덱스가 같은지 꼭 파악한다. for문을 이중 중첩이상으로 사용하다보면, 실수할 수 있는 부분이다.

 

헤더 파일 에러

 

시험장에서 긴장을 하게 되면서, #include 해야 할 파일들을 적지 않아서 발생할 수 있는 문제이다. 코드를 아무리 봐도 답이 없어 보일 때, 자기가 사용하고 있는 자료 구조에 대해서 올바르게 헤더 파일들을 인클루드 했는지 확인해야 한다. 자주 실수하는 부분은 sort 함수를 사용할 때, <algorithm>을 인클루드해야 하는 것을 까먹을 수도 있으니 주의하자. 헤더 파일 에러 실수를 누가 하겠어 하지만, 시험장의 긴장감과 비쥬얼 스튜디오에서는 정상적으로 실행되면 문제가 발생한다.

 

테스트 케이스가 일부만 맞는다?

 

테스트 케이스 일부만 맞는 경우가 많을 것이다. 그럴 때, 코드를 뒤엎을려고 하지말고 일부를 맞았다는 것에 자신감을 가져라. 그리고는 문제를 다시 분석해본다. 코드로 짤 때, 생각못했던 부분이 분명히 나올 것이다. 문제를 출제한 사람들도 그 부분을 생각하기 바란 것이다. 자신이 테스트 케이스 일부만 맞췄다고 자괴감에 빠질 필요가 전혀 없다. 문제를 다시 읽어보면서, 어떤 조건이 있어야 테스트 케이스가 만족될지 생각해봐야 한다.

 

cin 에러

 

문제를 풀던 도중에, 배열에 선언한 값이 계속 바꼈다. 문제의 조건에서 읽어야 하는 정수 값을 안읽으니, 선언한 배열에 아무런 것도 변경하지 않았어도 출력할 때, 배열 값이 바뀌게 되었다. 파일 입출력하는 크기나, 횟수를 정확하게 해야 한다.

 

한 개씩 돌릴 땐 잘되는데, 왜 여러개는 작동하지 않을까?

 

삼성 코딩테스트의 경우, 테스트 케이스가 10개가 주어지는데 1개씩 돌릴 때는 정상적으로 작동하다가 10개를 같이 돌

리면, 첫번째 테스트 케이스 외에 9개의 테스트 케이스에 대해서 올바른 답이 출력되지 않을 수도 있다 .이 경우는 변수 초기화, 자료 구조 초기화가 되지 않은 경우이다. 초기화를 진행하고 코드를 작성해야 한다.

 

잘 안 풀린다... 이번 코테는 포기할까?

 

 삼성 코딩테스트를 2번 응시했었고, 2번 다 합격했었다. 처음 응시했을 땐 시간에 쫓겨, 시험 당일까지 삼성 기출 문제를 다 풀지도 못했었다. 시험 문제로는 드래곤 커브와 치킨 배달 문제가 나왔었다. 문제를 풀다가 30~40분이 지났을 때, 코드를 한 줄 작성 못하고 있었다. 규칙을 찾지 못했었다. 고작 1번 문제 앞에 좌절하는 내 자신이 너무 초라했다. 스스로를 위로하기 위해, 이번 코딩테스트는 연습삼아 친걸로 하고 포기할까 고민하고 있었다. 다시 정신을 차리고, 꾸준히 하얀 종이에 예제를 따라 적었다. 적다보니, 규칙성이 보이고 2시간만에 드래곤 커브를 풀었다. 1시간이 남았을 때, 주변을 둘러보니 이미 2문제를 푼 사람들은 편안한 모습으로 다른 사람들을 구경하고 있었고, 중간 퇴실 시간을 기다리는 듯 보였다. 2번 문제인 치킨 배달 문제는 놀랍게도 1시간만에 풀었었다. 그 때, 당시 느꼈던 소름을 아직도 기억하고 있다. 정말 기분이 좋았고, 노력에 대해 보상을 받는 기분이였다. 

 

 백준에서 연습삼아 몇 번 풀어본건 이미 머릿속에서 다 기억되어 있다. 기억을 살려서 문제를 푸는 것이다. 하지만, 시험장에선 처음 보는 문제와 지문을 이해해야 한다. 짧은 시간 내에 문제를 분석하면서, 규칙을 이해하고 어떤 자료구조를 쓸 지 결정을 내려야 한다. 문제를 보자마자 이해가 안된다고 해서 절대 포기하지 않았으면 한다. 예제를 따라적다보면 신기하게도 문제가 보이는 순간이 있을 것이다. 3시간의 시험 시간은 분명히 짧은 시간이다. 짧은 시간동안 2문제를 풀지 못할 수 있지만, 포기하지 않았으면 한다.