삼성 SW 역량 테스트 B형 합격 후기
삼성전자 SW 역량 테스트
A형
A형은 보통 3시간에 두 문제를 해결하는 형식이며, DFS, BFS와 같은 알고리즘을 쓰는 구현 문제가 주로 나온다. 모의 A형에서 A+ 취득함!
B형
B형은 A형과는 다르게 4시간에 한 문제를 풀어야 한다. 또한 수정할 수 없는 Solution.java 파일과 수정해서 요구 사항에 맞는 결과를 내는 UserSolution.java 두 종류의 파일이 존재한다. 입출력은 이미 Solution.java 파일에 구현되어 있으니 코드를 분석해서 메서드 내에 로직만 완성하면 된다. SWEA에 있는 예시 문제를 보면 이해하기 더 쉬울 것이다.
구현은 체감상 A형보다 쉽거나 비슷하지만, 주어지는 입력의 크기가 매우 크고, 탐색이 많기 때문에 공간 복잡도와 시간 복잡도를 고려한 효율적인 설계가 필요하다.
원래는 라이브러리 사용이 불가했기에 연결리스트, 해시 등등 자료구조를 구현할 줄 알아야 했다. 하지만 최근 라이브러리 사용이 가능해지면서 B형 취득이 조금 더 수월해 진 것 같다! 다른 블로그를 보면 우선 자바 기본 라이브러리 사용해서 풀고, 그 다음 자신이 더 효율적인 설계로 구현할 수 있다면 대체하는 형식으로 많이들 한다고 한다.
시험 준비
알고리즘 공부
우선 SSAFY에서 진행한 수업을 notion에 필기하며 열심히 들었다. 그리고 배운 알고리즘과 관련된 문제를 백준 사이트와 SWEA 사이트를 이용하여 많이 풀었다. 특히 최근에는 삼성 역량 테스트 문제를 많이 풀어보았다.
모의 문제 풀기
처음 B형 모의고사 문제를 봤을 때는 코드 구조를 파악하는 것부터 쉽지 않았다. 하지만 문제를 여러 번 풀면서 점점 그 구조에 익숙해졌고, 빨리 파악할 수 있었다.
준비 기간이 길지 않았기에 B형 문제 유형을 파악하고, 주어진 코드를 해석하는 방법 연습했다. 그리고 문제를 다 풀더라도 시간이 얼마 걸리는지 보고, 다른 사람이 어떻게 풀었는지 보면서 여러 가지 구현 방법, 복잡도를 줄이는 방법을 터득했다. 또한 디버깅하는 방법도 연습했다.
시험장
이번에는 부울경 SSAFY 건물에서도 B형 검정이 시행되었다. 그래서 매일 오던 편안한 곳이었고, 컴퓨터, 키보드, 마우스 등 전부 익숙한 것이었기 때문에 환경에 대한 문제는 없었다. 다만 텀블러만 허용이 되었기 때문에, 마실 것이 필요하다면 무조건 텀블러를 챙겨야 한다!! 온라인 시험 환경은 이전에 쳤던 모의 A형과 거의 똑같았다.
문제 풀이 방법
설계(30분-1시간)
- 문제를 꼼꼼히 읽으면서 주석으로 정리한다. 요구 사항과 구현할 순서를 일단 간단하게 정리하고 이를 어떻게 구현할지는 일단 생각만 해둔다. B형의 경우 로직마다 메서드가 나누어져 있고, 문제에 구현 순서가 잘 정리되어 있기 때문에 메서드 안에 주석으로 간단히 정리해도 무관한 것 같다.
- 문제를 다시 읽으면서 빼먹은 조건이 없는지 체크하고, ‘BFS로 구현하겠다~’하는 구체적인 구현 방법을 추가하며 정리한다.
- 구현에 필요한 자료구조 및 class를 정의한다. 이때 매우 중요한 것은 시간복잡도와 공간복잡도를 체크해야 한다는 것이다!
- 예시를 보면서 제대로 동작하는지 확인하고, 수정할 부분이 있다면 수정한다.
구현(2시간)
- 설계한 대로 구현! 문제가 없다면 더 빨리 끝날 수도 있다.
디버깅 및 최적화(1시간)
- 시간 복잡도를 계산하며 시간이 얼마나 걸리는지 확인하고, 시간을 최대한 줄인다.
- 만약 그냥 제출했을 때 3초(제한시간) 이내로 통과가 되었더라도, 본인의 코드가 총 몇 초가 걸렸는지 확인하고 최적화를 진행해주어야 한다.
- 이때 기존 코드를 잘 백업해두어야 한다!
복잡도를 줄이자
단순하게 생각해서 메서드를 구현하면 구현하기는 쉽다. 하지만 복잡도가 엄청나다. 그렇기 때문에 구현이 좀 더 어렵더라도 복잡도를 낮추기 위해 더 효율적으로 수행할 수 있는 자료구조를 다시 생각해 보아야 한다.
복잡도를 줄일 수 있는 방법은
1. 문제에서 요구하는 메서드를 수행할 수 있는 가장 효율적인 자료구조를 설계한다(최대한 효율적으로..!!)
2. 해시, 정렬, 이분탐색 등 여러 알고리즘을 적용하여 복잡도를 최대한 낮춘다
마무리
모의고사를 풀면서 기존 코드 분석에 익숙해지고, 시간 복잡도와 공간 복잡도 개선을 위한 여러 가지 풀이를 본 것이 많은 도움이 되었던 것 같다. 사실 “B형을 반드시 따겠다!” 결심하고 친 게 아니라서 긴장을 많이 하지 않은 것도 좀.. 도움이 되었다!
테케를 전부 돌렸을 때 1.5-1.6초 왔다갔다 해서 솔직히 50개 테케 다 돌아가면 3초가 넘어갈 거라고 생각했다. 그래서 합격에 대한 마음은 비우고 있었는데 다행히 히든 테케들이 그렇게 사악하진 않았던 것 같다... (ㅎㅎ)
사실 시간복잡도와 공간복잡도를 계산하는 것이 많이 익숙하지 않아서 그냥 가능한 한 최대한 효율적으로 설계해보자!는 생각으로 했었는데 운이 같이 따라주었던 것 같다. 문제를 잘 분석하고 설계하면 통과할 수 있으니 기회가 된다면 꼭 도전해보는 게 좋은 것 같다.