[Algorithm] 삼성 SDS 24년 상반기 알고리즘 특강 후기(Pro 자격증)
삼성 SDS 24년 상반기 알고리즘 특강을 듣게 된 계기
백준 골드 1에서 정체된 실력을 체계적인 알고리즘 교육을 통해 발전시키고자 24년 상반기 알고리즘 특강에 지원하게 되었다.
23년 하반기까지는 입과전에 테스트를 본 후, 서류와 함께 입과자를 선별했다.
이번 24년 상반기에는 입과 테스트는 따로 없었고, 아래 포스터처럼 서류만으로 선별하였다.
서류에는 백준 ID, 재학증명서(또는 졸업증명서), 성적증명서 등을 기술해야 한다.
특강 내용
입과자로 선별된 후에는 2월 13일부터 23일까지 약 10일동안(주말 제외) 잠실 SDS 본사에서 특강을 듣게 된다.
C++(또는 C), Java 반으로 나뉘고 이는 서류에 원하는 반을 기술할 수 있다.
그러나 python만으로 알고리즘 공부를 했더라도, 입과하는데 제약은 없는 듯 하지만 특강 내용이 C++로 진행되기에 수업을 따라오는것은 개인 역량에 달린 듯 하다.
저번 특강까지는 과정이 모두 끝난 후(2주후)에 삼성 SDS Pro 시험을 볼 수 있게 했다면, 이번부터는 1주차가 끝난 후 부터 시험을 볼 수 있게 해준다.
참고로 Pro 시험은 삼성 SDS 임원들이 보는 테스트이나, 특강을 듣는 학생들에게 특별히 볼 수 있는 기회를 주고 만약 합격했다면 채용 프로세스 일부를 건너뛰고 바로 임원면접을 볼 수 있는 기회를 준다.
취준생 입장에서는 정말 좋은 기회여서 이 특전을 노리고 알고리즘 특강을 듣는 사람들도 있을 것이라고 생각한다.
1주차
이번부터 1주차가 끝난 뒤 바로 시험을 볼 수 있는 기회가 주어지므로, 강사분께서 학생들의 많은 합격을 위해 1주차에 최다 빈출 알고리즘에 대해서 집중적으로 공부했다.
예를 들면, 세그먼트 트리이다.
삼성 SDS Pro 시험에서 제일 많이 나오는 유형이고, 많이 풀어봐야 접근할 수 있기에 이 알고리즘을 집중적으로 가르치신다.
물론 DFS, BFS 같은 그래프 알고리즘, 이분탐색, 정렬, 힙 같은 기초적인 알고리즘도 알려주시지만 1~2일만에 넘어간다.
그래서 SDS pro 시험을 목표로 하는 학생들은 관련 문제를 많이 풀어보고 기초 알고리즘에 익숙해진 상태로 특강을 듣는 것을 추천한다.
1차 시험
교육 중간에 1차 시험을 본다고 문제가 더 쉽거나 그렇지는 않다고 한다.
대학생이라고 임원들이 보는 시험과의 차이를 두지 않는다는 것이다.
시험시간은 총 4시간 1문제이다.
얼핏보면 그리디 알고리즘을 사용하는 문제처럼 보이지만 그리디 알고리즘을 사용했을 때의 반례가 존재하여 다른 방법을 찾다가 세그먼트 트리를 사용하는 방법으로 접근했더니 돌아가는 코드를 작성하지도 못하고 4시간이 지났다.
집에 돌아와서 다시 한번 고민해봤는데, DP로 접근하니 풀렸다.
평소에 실버1 ~ 골드 하위의 DP문제를 풀었는데, 확실히 그 문제들보다는 어려웠다.
2주차
2주차 첫번째 날에는 SDS가 어떤 곳인지 인사팀분들이 오셔서 설명해주시고, 간이 채용설명회도 해주신다.
2주차에는 조합론, DP, 위상정렬, MST, LCA, 플로이드-와샬 알고리즘을 주로 배운다.
1주차의 핵심은 세그먼트 트리였다면, 2주차의 핵심은 LCA이다.
아무래도 세그먼트 트리나 LCA가 쉬운 알고리즘은 아니고, 응용하기 좋은 알고리즘이라 그런 것 같다.
1주차, 2주차 합쳐서 약 50문제 이상 풀어보게 되지만 본인이 문제를 빨리 풀거나 늦게 풀어도 상관없기에 다들 각자 페이스에 맞춰서 문제를 푼다.
나도 문제를 많이 푸는것보다는 알고리즘의 원리를 이해해서 외우지 않아도 풀 수 있게끔 만드는 것에 집중했다.
확실히 2주차에 난이도가 있는 알고리즘 문제를 풀다보니 못따라오는 경우가 생긴다.
그러나 강사님께서 학생들이 못따라오는 것 같으면 시간을 조금 더 주고, 질문도 많이 받아주신다.
8일동안 9시부터 18시까지 점심시간 1시간을 제외하고는 알고리즘 문제를 풀고, 수업 듣는데에 집중했다.
쉬는 시간이 있기는 하지만 다들 열정이 넘쳐서 쉬는 학생들을 거의 못본 것 같다.
강사님 입장에서는 SDS Pro 시험을 최대한 많이 통과하면 학생 입장에서 좋으니, 굉장히 열정적으로 가르쳐주신다.
2차 시험
2차시험은 특강이 끝난 주 토요일에 봤다.
졸업식과 2,3차 시험 기간이 겹쳐서 따로 공부를 더 할 시간은 없었다.
2차 시험은 세그먼트 트리를 사용하는 문제인 것 같았다.
강의 내용에서 다뤘던 세그먼트 트리 응용 문제와 굉장히 유사했지만, 나는 시험 도중에 이 방법을 생각하지 못하고 세그먼트 트리 + 최대 힙 + 최소 힙 방법으로 구현했다.
5분 남기고 구현을 마무리하고, 테스트케이스도 맞게 나오는 것 같아 제출했지만, 메모리 관련 오류가 발생해서 당황한채로 시험이 끝나버렸다.
3차 시험 때 알게 된 것인데, 출력 형식 문제였던 것 같다.
문제에서 요구하는 출력 형식에 맞게 코드를 작성해야 하는데, 1차 시험은 제출도 못해보고, 2차 시험은 5분 남기고 코드를 완성했다보니 이 부분을 놓친것이다.
3차 시험
3차 시험은 다음날인 일요일에 봤다.
플로이드-와샬 알고리즘을 사용하는 문제다.
딱 봐도 ‘이거 플로이드-와샬이네’ 라고 생각이 드는 문제지만, 조건이 추가로 붙는다.
2차시험도 ‘구간합 문제구나. 세그먼트 트리네’ 라는 생각이 바로 들지만, 추가로 붙는 조건이 상당히 까다롭다.
이번에는 구현을 넉넉히 해내서 약 2시간의 시간이 남았지만, 서버에 제출해보니 테스트케이스 20개중 8개만 맞다고 나왔다.
열심히 디버깅을 해봤지만, 해결하지 못한 채로 시간이 흘렀다.
4차 시험
마지막 시험인 4차 시험은 그 다음주 목요일에 봤다.
사실 알고리즘 특강을 듣게 된 이유가 다양한 알고리즘을 접하고 그것을 내것으로 만들기 위해서였고 목표를 이뤘지만, 시험을 보다보니 욕심이 생겼다.
그렇기에 최다 빈출인 세그먼트 트리와 LCA 문제를 여러개 풀어보고 시험장에 들어갔다.
하지만 문제를 보자마자 당황했다.
이번에는 누가봐도 위상정렬 문제인 것이다.(조건이 까다로운)
안타깝게도 위상정렬 문제를 수업시간에 딱 한번 풀어보고, 그 이후에는 풀어보지 않았다.
위상정렬 알고리즘 코드를 외우지는 않았지만, 이해하고 있는 이론을 바탕으로 구현을 시도 하였고 다행히 빠른 시간에 구현할 수 있었다.
이번에도 예외처리가 까다로워서 첫 제출에 20개중 12개의 테스트케이스만 맞았고, 디버깅을 약 2시간 가까이 한 것 같다.
30분이 남았을 때, 20개중 20개의 테스트케이스가 맞았다는 문구를 보고 퇴실하였다.
모든 테스트케이스가 맞았다고 해도, 서버에서는 더 복잡한 테스트케이스로 테스트하기에 합격했다는 확신이 없었지만, 약 3시간 후 합격했다는 문자와 함께 안도하였다.
1~4차 시험 난이도는 약 골드 2 ~ 플레 4 정도로 예상한다.
어떤 학생이 수강하면 좋을까?
수강생이 크게 2가지 부류로 나뉘는 것 같다.
- 알고리즘에 대한 이해를 높이기 위해
- SDS Pro 시험을 통과하기 위해
1번은 수강전에 적어도 기초적인 알고리즘은 숙달해놓는 것을 추천한다.(기초 그래프 알고리즘, DP, 이분 탐색, 정렬, 힙 등)
또한 본인이 python을 주로 사용한다면 C++의 STL 사용법에도 익숙해져야 한다.
특히 vector 사용법에 익숙해지면 좋다. cstring 헤더에 있는 memset 함수도 자주 사용하니 이를 위주로 공부하면 좋을 것 같다.
2번은 1번보다 더 심화된 부분을 공부하고 가면 좋을 것 같다.
미리 LCA나 세그먼트 트리 알고리즘을 공부하고, 강의 시간에 응용 문제를 빠르게 풀다보면 Pro 시험을 통과할 것이라 생각한다.
이는 내가 수강하면서 느낀점으로, ‘세그먼트 트리, LCA, 위상정렬 기본 문제들을 풀어보고 올걸’ 하는 생각을 했다.
수강생들의 풀은 되게 다양했다.
백준 사이트를 거의 처음 이용해보는 학생들도 있는 반면, 플레 이상인 학생들도 꽤 있었다.
특강에서 얻고자 하는 바가 각자 다르지만, 위에서 말한대로 적어도 기초 알고리즘에 숙달되어 있는 상태면 수업을 따라가는데에 큰 문제는 없을 것이라 생각한다.
2주동안 정말 재미있고 값진 경험을 했고, 알고리즘 실력도 단기간에 상승했다.
4학년 이상이고, 본인이 알고리즘에 흥미가 있는 학생이고, 백준 티어로는 실버1 ~ 골드1 사이에게 정말 추천하는 특강이다.
Leave a comment