SSAFY 9기에 입과해 교육을 듣던 중 SW 테스트 A형 이상을 취득한 교육생에게 B형에 응시할 자격이 주어졌다. SSAFY에 입과하기 위해 쳤던 코딩 테스트에서 A형을 취득했기 때문에 B형에 응시할 수 있었다.
3/4, 4/1, 4/29 총 3회의 응시 기회가 있었고, 가장 처음 열린 3/4 시험을 신청했다.
삼성전자 SW 역량 테스트?
삼성 SW 역량테스트는 삼성에서 주관하는 코딩테스트라고 보면 된다. 예전에는 SWEA에서 상시 검정을 통해 시험을 신청해서 응시했지만 코로나로 인해 상시 검정이 막히고 현재는 삼성전자, 삼성 SDS 알고리즘 특강 수강생 혹은 SSAFY 교육생, 삼성 임직원 등 특정 조건을 만족해야 응시 기회가 주어진다.
삼성 SW 역량 테스트는 A형(Advanced), B형(Professional), C형(Expert) 3가지의 등급으로 구분된다.

A → B → C 로 갈수록 난이도가 증가하고 C형의 경우 C/C++의 언어로만 응시할 수 있다.
위 사진에서는 B형 시험이 라이브러리 사용이 불가능하다고 되어있지만, 현재는 표준라이브러리를 사용할 수 있다.
추가로, B형에서 언어는 기본적으로 C/C++/Java 로 응시가 가능하지만, 월 1회 Python 언어로도 응시할 수 있는 기회가 있고(선택할 수 있는지는 모름), 추후 전면 오픈을 검토하고 있다고 한다.
B형 테스트의 특징
삼성 SW 역량테스트 B형은 일반적으로 생각하는 코딩 테스트와 조금 다른 면이 있다.
A형 문제나 백준의 알고리즘 문제들은 입력을 받는 것부터 알고리즘, 출력까지 모두 구현해야 한다면 B형 문제는 2가지의 파일이 주어지는데, 내가 구현해야 하는 부분(클래스)과, 내가 구현한 것을 테스트하는 부분(main메서드)이 주어진다.
main 메서드는 내가 건들 수 없고, 구현에 필요한 데이터는 메서드의 매개변수로 주어진다. (프로그래머스 문제 스타일처럼)
구현하는 부분은 하나의 클래스로 이루어지고, 클래스 안에서 3~5개의 필수 메서드를 구현해야 한다.
시험 준비
SSAFY 교육생 대상으로 진행된 B형 알고리즘 특강과 SWEA의 문제들을 풀어보면서 준비했다.
B형 특강 8회 중 2회차까지 진행되었을 때 시험을 봐야했기 때문에 SWEA의 B형 샘플 문제들을 풀어보고 유형을 익히는 것에 집중했다.
B형을 통과하기 위해서는 기본적으로 자료구조와 알고리즘에 대해 알아야 한다.
특히, 연결리스트, 배열, 스택, 큐, 힙 등 자료구조를 단순히 사용하는 것만 알아서는 안되고, 각각의 자료구조가 가지는 연산에서의 시간 복잡도를 잘 정리하는게 중요한 것 같다.
예를 들면, 연결리스트의 경우 특정 인덱스까지 이동하는데 O(N)이 걸리고 삽입, 삭제의 연산은 O(1)이 걸리는 반면 배열의 경우 특정 인덱스를 꺼낼때 O(1)이 걸리고 삽입, 삭제시 O(N)의 시간이 걸린다.
이런 자료구조들의 특징을 바탕으로 자료구조를 선택하거나, 문제에서 특정 조건이 걸려있다면 직접 자료구조를 구현하여 라이브러리보다 더 최적화 할 수 있도록 연습했다.
시험장에서..
시험은 역삼에 있는 멀티캠퍼스에서 진행되었다.
12:50 까지 대기장소에서 대기하다가 시험장으로 내려가는 방식이었는데, 테스트에 응시하는 인원이 생각보다 많았다.
대기장소에서 검정장인 305호로 내려간 후 13:30 까지 입실체크, 신원확인, 휴대폰 반납, 빌드 테스트, 메모지 배부의 과정이 진행되었다.
시험을 위한 IDE툴로 Java는 eclipse, C++은 Visual Studio을 사용할 수 있었는데 IntelliJ에 익숙했던 나에게 아쉬운 부분이었다. (IntelliJ 키맵 설치를 위해 eclipse에서 플러그인 설치하러 들어갔는데 인터넷을 끊어놨더라.…)
시험 시작
시험은 13:30 에서 17:30 까지 총 4시간 진행되었다. 1시간 이후에 퇴실이 가능하고 화장실은 감독관 동행으로 1명씩 이용할 수 있다는 안내를 받았다.
시험 시작 후 30분동안 문제를 읽으면서 어떻게 풀어나갈지 생각하는 시간을 가졌다. 문제 자체는 구체적인 예시가 있어서 이해하는데 크게 어려움은 없었다. 예제로 주어진 그림과 테스트를 따라하면서 3번정도 읽어봤던 것 같다.
문제를 이해한 뒤에 처음 든 생각은 “이걸 어떻게 구현하지?” 였다. 완전탐색의 방식을 통해 구현하려고 한다면 쉽게 구현할 수 있는 문제였지만, 그렇게 접근할 경우 TLE가 발생하는 것이 뻔히 보였다.
시간초과가 발생하지 않도록 최대한 최적화된 자료구조를 설계하는 것이 핵심인 문제였는데, 자료구조를 어떻게 사용할지 고민하는 것만으로 1시간이 지나갔다. 1시간 이후부터 퇴실이 가능했기 때문에 그만하고 나갈까 하는 생각도 들었지만 (3~4명은 그만두고 나갔다), 대전에서 서울까지 온게 아까워서 붙어있었다.
여러가지 조합으로 설계를 하고 뒤엎는 과정을 2번 정도 한 후 TreeSet + 해싱 조합으로 된 자료구조를 설계했고, 재귀 방식의 알고리즘으로 문제를 풀었다.
4시간의 시험 중 1시간 문제이해 및 설계 + 1시간 30분 구현 + 30분 디버깅 과정을 거치고 테스트케이스가 모두 맞는 것을 확인하고 더 이상 생각하고 싶지 않아 1시간 일찍 나왔다. (급격한 당부족)
합격
토요일에 시험을 치르고 난 다음주 목요일에 SSAFY에서 B형 특강을 담당하고 계신 프로님께 합격전화를 받았다.
사실 내가 아직 잘 못 다루는 부분으로 시험이 출제되었다면 합격하지 못했을 텐데 운이 좋았던 것 같다.
또, 3/4일 B형 시험을 보고, 3/6에 SSAFY A형 테스트가 예정되어 있었기 때문에 백준과 SWEA의 삼성 역량테스트 기출 구현문제를 많이 풀어봤던 것도 B형 시험을 잘 칠 수 있는 요인 중 하나였지 않았나 싶다.
