반응형

1. 최신 출제 경향과 준비 방향

코딩 테스트는 '기업/기관에서 직원이나 연수생을 선발할 목적으로 시행하는 일종의 문제풀이 시험'이다.
일반적으로 대기업의 공채와 같이 지원자가 많은 상황에서 효과적으로 지원자를 선별하기 위해 상당수 기업에서는 코딩 테스트를 채용 과정으로 채택하고 있다.

IT 직군에서 코딩 테스트를 보는 대표적인 기업으로는 삼성전자, 카카오, 라인플러스코퍼레이션(라인)이 있다. 
예를 든 기업은 모두 코딩 테스트를 시행하며, 응시생들에게 2~5시간 동안 여러 개의 알고리즘 문제들을 풀도록 한다는 공통점이 있다. 정확한 알고리즘을 사용하여 얼마나 빠르게 많은 문제를 풀었는지를 토대로 순위를 매기고 있다.
이렇게 정해진 시간 내에 문제를 푸는 방식은 코딩 테스트뿐만이 아니라 다수의 시험에서 차용하고 있으며 코딩 테스트에서도 계속 사용할 것으로 예상된다.

물론 IT업계에서는 알고리즘 문제를 푸는 방식을 제외하고도 요구사항에 맞는 소규모 프로그램을 개발하는 유형, 논문이나 책을 읽고 관련 프로그램을 작성하는 유형 등 다양한 코딩 테스트 유형이 존재한다. 하지만, 가장 대표적인 코딩 테스트 유형은 알고리즘 코딩 테스트이다. 해마다 조금씩 시험 유형이 변경되기도 하지만, 여전히 공채에서는 주로 알고리즘 문제를 출제한다. 

코딩 테스트는 문제 해결 능력을 확인하는 시험

기업은 코딩 테스트를 통해 취업 준비생에게 무엇을 요구하는 걸까?
대체로 채용을 위해 기업에서 주관하는 코딩 테스트에서는 매우 높은 사고력이나 어려운 알고리즘 기반의 지식을 요구하지 않는다.

코딩 테스트에서는 주로 기초 알고리즘에 기반하는 문제가 출제된다.
그중에서도 가장 출제 빈도가 높은 문제는 그리디(Greedy), 구현(Implementation), DFS/BFS를 활용한 탐색 문제이다.
특히 기초 그리디 문제 유형은 문제 해결 방법만 떠올린다면 간단하게 구현할 수 있어 자주 등장하는 유형이다.
구현 문제는 실제 개발 과정에서 사용될 법한 구현 기법들을 물어보는 경우가 많다.

또 상대적으로 높은 사고력을 요구하는 다이나믹 프로그래밍이나 그래프 이론 문제도 출제된다.
다만, 이런 유형의 문제는 출제되더라도 난이도가 높지 않은 경향이 있다. 실제로 정수론, 최단 경로 문제, 고급 다이나믹 프로그래밍 문제 등은 경쟁적 프로그래밍 대회에서나 고난이도로 등장하며 기업 코딩 테스트에서는 출제율이 낮고 상대적으로 쉽게 출제되는 편이다.

다음 그림은 2016년~2019년 사이에 출제되었던 주요 기업들의 공채에 등장한 알고리즘 유형을 정리한 도표이다.
중복을 포함하여 알고리즘 유형을 빈도수에 따라 표현하였다.
상당수의 문제는 문제를 해결하는 데 여러 가지 알고리즘을 요구한다. 따라서 코딩 테스트를 준비할 때는 복합적인 알고리즘을 요구하는 문제들을 염두에 두고 공부해야 한다.

알고리즘 코딩 테스트 유형 분석

실제로 매우 복잡한 문제에서는 정렬, 다이나믹 프로그래밍, 이진 탐색, 구현 등의 개념이 모두 사용되기도 한다.
문제를 해결하는 방법은 여러 가지가 있기 때문에 해석하기에 따라서 다른 도표가 나올 수 있다.

※ 보통 알고리즘 대회는 문제 해결 대회(Problem Solving)이라는 용어를 사용하기도 하는데 줄여서 PS라고 하기도 한다.

 

기업별 문제 출제 경향

다음은 카카오 기술블로그에서 언급된 코딩 테스트 문제 난이도에 대한 내용이다.

"ACM-IPC 같은 어려운 알고리즘 설계 능력을 겨루는 문제가 아닌, 업무에서 있을 만한 상황을 가정하여 독창적이고 다양한 분야의 문제를 출제했고 난이도 또한 비교적 쉬운 수준으로 조정하였습니다."

블로그에 글이 올라온 2017년도의 카카오 공채 코딩 테스트 문제를 확인해보면 '그리디 혹은 구현 유형의 문제'를 다수 확인할 수 있다. 카카오 코딩 테스트는 문자열을 처리해야 하는 구현 문제를 자주 출제하는 것으로 유명한데, 구현 문제는 문법을 안다고 해서 쉽게 해결할 수 있는 문제는 아니다.
다양한 케이스를 고려해야 안정적으로 만점을 받을 수 있는 문제들이 주로 출제된다.

그렇다면 삼성전자의 코딩 테스트는 어떨까? 인터넷에서 삼성전자의 코딩 테스트 후기와 복원된 문제를 쉽게 찾아볼 수 있는데, '문제를 바르게 읽고 예외 상황을 적절히 처리하는 방식으로 소스코드를 작성하는 유형'이 가장 많이 출제되었다는 후기가 많다. 또한 문제 유형은 모든 상황을 고려해야 하는 완전 탐색 문제가 많이 출제되는 것으로 유명하다. 
정리하면 삼성전자의 코딩 테스트는 완전 탐색, DFS/BFS, 구현 유형의 문제를 가장 선호한다.

물론 코딩 테스트 문제에서 출제되는 알고리즘 이론이 쉽다고 해서 문제를 쉽게 풀 수 있다는 의미는 아니다. 
한 예로 그리디 유형의 알고리즘은 '현재 상황에서 가장 좋은 것만을 선택하면 되는 알고리즘'이라서 알고리즘 유형의 정의만 들었을 때는 굉장히 쉬워 보인다. 실제로 난이도가 낮은 '거스름돈'문제 같은 그리디 문제는 쉽게 해법을 찾아낼 수 있다. 하지만 그리디 유형의 문제는 출제자가 마음만 먹는다면 매우 어려운 난이도로 출제할 수 있다. 단지 기업의 코딩 테스트는 테스트의 목적인 '직원 선발'에 맞는 수준으로 난이도를 조정했을 뿐이다. 

일반적으로 알고리즘 코딩 테스트는 2~5시간가량의 제한된 시험 시간에 8개 이하의 문제를 푸는 형태로 출제된다. 
시간이 촉박하기 때문에 평상시 프로그램을 개발하거나 학교 과제용 문제 풀이에 비하면 심리적으로 부담이 되는 편이다. 따라서 이런 시간 제한이 있는 코딩 테스트는 연습해두지 않으면 평소의 문제 해결 기량에 비하여 좋은 성과ㅏ가 나오지 않을 수 있다.

알고리즘 분야는 다른 분야에 비해서 문제 해석 및 답안 작성에 투자해야 하는 시간이 긴 편이다. 
이렇듯 다른 시험보다 문제를 풀기 위해 투자해야 하는 시간이 길다 보니, 대부분의 코딩 테스트에 참여하는 취업 준비생은 문제 풀이 시간이 부족하고 촉박하다고 느낀다. 그렇다면 알고리즘 코딩 테스트에서는 몇 개의 문제를 해결해야 합격할 수 있을까? 출제자의 의도에 따라서 다르겠지만, 대부분의 알고리즘 대회 및 코딩 테스트에서는 상위 5% 미만의 사람만 문제를 전부 풀 수 있으며 전체 문제 중에서 절반가량을 정확히 해결할 수 있다면 합격할 수 있다.

문제 난이도와 합격 비율을 확인해보는 차원에서 삼성전자, 라인, 카카오 세 기업에서 이루어진 채용 목적의 코딩 테스트에 한 번 이라도 참가해본 적이 있는 2년 차 이하의 IT 직군 신입을 대상으로 설문 조사를 진행했다.다음 설문 조사 결과를 보면 합격자는 평균 69%의 문제를 풀었으며 불합격자는 평균 38%의 문제밖에 풀지 못했다고 응답했다. 코딩 테스트는 일종의 주관식 시험으로 많은 양의 문제를 맞혀야 하는 어학 능력 시험과는 사뭇 다른 양상을 보인다.

삼성전자, 라인 , 카카오 참가자 대상 푼 문제의 개수

응답자들에게 코딩 테스트이 체감 난이도를 물었을 때 다음과 같은 응답을 받았다. 
응답자들의 답변을 보면 코딩 테스트에 대한 부담감은 있지만, 예상 외로 어렵게 출제되지는 않았다고 볼 수 있다.

설문 조사 결과를 바탕으로 '절반 이상의 문제를 안정적으로 해결했을 때 코딩 테스트에 합격할 수 있다'는 것을 예상할 수 있다. 물론 코딩 테스트는 항상 상대평가를 위한 척도이다. 문제의 난이도가 낮고, 지원자의 수준이 높다면 커트라인은 100% 가깝게 높아질 수도 있다. 반대로 한 국가 교육기관의 코딩 테스트에서는 지원자의 수준에 비해 문제 난이도가 높게 출제되어 합격 커트라인이 20% 미만으로 형성된 적도 있다.

문제 해결 능력은 상대적이므로 코딩 테스트를 준비하는 사람이라면 코딩 테스트에 자주 출제될 법한 문제를 여러 번 살펴보는 것이 유리하다는 것을 인지해야 한다. 이어서 연도별 코딩 테스트 유형을 살펴보자.

 

2. 연도별 코딩 테스트 유형 분석

삼성전자는 4년제 대학을 졸업한 사람이 지원하는 3급 공채를 기준으로 설명하고, 다른 기업의 경우도 정식 공채 코딩 테스트를 기준으로 설명한다. 다만, 대부분의 기업에서는 공채가 아닌 인턴 채용의 경우에도 공채 때와 비슷한 수준과 유형의 문제로 출제된다는 점을 기억하도록 하자.

2020년 주요 기업 코딩 테스트 유형 분석

2020년 상반기에 시행된 대기업 IT 직군의 공채에서 출제된 알고리즘 문제를 살펴보면 다음과 같다.

  날짜 풀이 시간 문제 개수 커트라인 주요 문제 유형 시험 유형
라인 상반기
(2020-04-05)
2시간 30분 6문제 4문제 구현, 문자열, 자료구조 온라인
삼성전자 상반기
(2020-06-07)
3시간 2문제 2문제 완전 탐색,
시뮬레이션,
DFS/BFS
오프라인

삼성전자는 매년 시험 난이도가 조금씩 상승하는 추세를 보였지만, 기출문제 또한 잘 알려져 지원자들 역시 좋은 성적을 받고 있다. 따라서 현재 삼성전자의 SW 역량테스트는 2문제를 모두 맞혀야 합격 안정권이라고 할 수 있다. 종종 2문제 중 1문제를 풀었어도 1문제를 빠르게 풀었다면 합격하는 경우가 있다고 알려져 있다.

문제 유형은 완전 탐색 유형에서 시뮬레이션 유형으로 바뀌는 추세이다. 
혹은 완전 탐색과 시뮬레이션 모두 요구하는 문제가 출제되고 있으므로 이 2가지 문제 풀이에 모두 익숙해질 필요가 있다. 대체로 사소한 조건을 고려하면서, 약간 응용된 DFS/BFS 소스코드를 작성할 수 있다면 2문제를 모두 맞힐 확률이 높으므로 너무 염려하지 말자.

라인의 경우 2017년, 2018년과 비교했을 때 2019년과 마찬가지로 난이도가 조금 완화되는 경향을 보였다. 문제 유형은 이전 연도와 비슷하게 출제되었다.

반응형