1. 지원동기 및 선발 과정
지난 학기 컴퓨터공학부 수업을 수강하면서 공과대학 내부에 붙어있는 위의 포스터를 보고 지원하게 되었습니다. 대학에서 이산수학, 컴퓨터프로그래밍, 자료구조, 알고리즘 등 기본이 되는 과목들을 수강하면서 강의에서 주어지는 과제 정도는 해결할 능력을 갖춘 상태였습니다. 다만 알고리즘 문제해결(Problem Solving, 이하 PS)에 몰입한 경험은 한국정보올림피아드에 참가했던 지난날로 거슬러 올라가야 했습니다. 이번 특강이 학교에서 배우고 익힌 내용들을 정리하고 응용할 수 있을 뿐만 아니라 문제해결능력을 끌어올림과 동시에 더 다양한 지식까지 배울 수 있는 좋은 기회가 될 것이라고 생각했습니다.
입과테스트로는 총 5문제를 해결해야 했습니다. 해당 기간 동안 시간제한 없이 제출할 수 있었기 때문에 시간을 투자한다면 해결하는데 무리가 없을 것이라고 생각됩니다. 여러 후기들을 보면 전부 풀어야만 선발되는 것은 아니고 학력, 전공, 지원동기, 자기소개 등이 복합적으로 선발에 고려되는 듯합니다. 언어는 C/C++, Java 모두 다룰 수 있지만 Java가 PS에 뚜렷한 강점이 없다고 생각하여 PS에 메이저하게 사용되는 C++로 교육을 진행하는 1차 특강에 지원하였습니다.
감사하게도 선발되어 1월 9일부터 1월 20일까지 2주에 걸쳐 수강하게 되었습니다.
2. 특강 과정
삼성SDS에서 자체 제작한 교재와 BOJ의 문제를 기반으로 특강이 진행되었습니다. 커리큘럼은 위 포스터에 적혀있는 대로 진행되었습니다. 1주 차에는 알고리즘 기초, 자료구조, 정수론, 조합론을, 2주 차에는 그래프, 동적계획법(DP)을 공부하였습니다. 알고 있는 내용도 있었지만 LCA 등 생소한 내용도 다뤄주셨고, 최적의 시간복잡도를 위한 자료구조와 알고리즘을 고민하는 문제들을 많이 다뤄 학교 알고리즘 강의의 연장선에서 크게 도움이 되었습니다. 매일 이론설명과 함께 BOJ를 통해 다양한 문제들을 풀다 보니 어느새 PS가 취미가 되어버렸습니다. 이번 특강의 가장 큰 성과가 아닐까 싶습니다. 특강 이전에는 학교에서 배운 내용들을 정리할 겸 간간이 BOJ를 이용해 문제를 푸는 정도에 그쳐 실버 1 티어였으나, 특강 이후 거의 매일 조금씩이라도 문제를 풀다 보니 어느덧 골드 1 티어가 되었고 곧 플래티넘을 바라보고 있습니다. 앞으로도 꾸준히 알고리즘 공부와 문제풀이를 이어나갈 것이기에 추후 성장이 기대되기도 합니다. Gennady Korotkevich나 William Lin과 같은 이들에게 관심을 갖고 존경심까지 갖게 될 정도이니 많은 변화가 있었던 것 같습니다. 이외에도 SDS 채용설명회 시간도 마련해 주시고 현직에 계신 강사님들께서 직무를 비롯해 다양한 질문을 받아주셨습니다. SDS 혹은 관련 직무에 관심이 있거나 알고리즘 실력을 끌어올리고자 한다면 2주의 시간이 아깝지 않은 정말 좋은 기회라고 생각합니다.
3. 수료 테스트
수료 테스트로 삼성 SDS의 임직원들만이 볼 수 있는 SW검정 Professional 시험을 응시해야 합니다. 수료 조건으로 시험 합격이 아닌 시험 응시이기 때문에 생각보다 부담 없이 볼 수 있습니다. 다만 합격할 경우 SDS 지원 시에 혜택이 있기 때문에 마냥 부담을 덜어낼 순 없었습니다. 또한 열심히 공부하고 준비한 만큼 꼭 합격이라는 성과를 거두고 싶었습니다. SW검정 Professional 시험은 주로 O(N), O(NlogN), O(logN) 등 최적의 시간복잡도를 갖는 알고리즘을 요구합니다. 다익스트라 알고리즘, 벨만-포드 알고리즘, 플로이드-워샬 알고리즘, 위상정렬 등 그래프 이론 전반에 대한 정확한 이해와 구현, 그리고 응용이 가능해야 합니다. 또한 골드 상위~플래티넘 수준의 DP 설계 및 해결능력, 인덱스 트리 구현 및 응용(lazy propagation 등), Heap과 BST 등 기본적인 자료구조, 정수론, union-find, LCA 등을 이해하고 응용할 수 있어야 합니다. 특강에서 다룬 내용들을 다시 공부하고 주어진 문제들, 그리고 추가적으로 이를 응용할 다른 문제들을 BOJ에서 찾아 풀면서 시험을 준비했습니다. 단순히 기본 문제에 대한 구현을 외워서 합격할 수 있는 시험이 아니란 것을 알고 있었기 때문에 문제를 파악하고 배운 자료구조와 알고리즘을 적절하게 응용할 수 있는가에 초점을 두고 공부했습니다. 혹자는 익숙한 문제가 나오면 풀고 그렇지 않다면 못 푼다고들 합니다. 특정 내용이 나오길 바라면서 그것만 공부하다가 시험장에서 처음 보는 내용을 보고 좌절하기보다는, 풀지 못하더라도 시도라도 할 수 있는 배경지식과 실력을 갖추고자 특강에서 다룬 내용들만큼은 전부 확실하게 공부하고자 했습니다. 그런 점이 심적으로도 편했고 실력 향상에도 도움이 됐습니다. 검정에서는 자신 있던 DP 문제가 나왔고 1시간에 걸쳐 알고리즘 설계와 구현을 마쳤습니다. 여러 테스트케이스와 함께 검토한 후 시험시작 2시간 이후부터 퇴실이 가능해 시험을 마치고 시험종료 2시간 후 합격했다는 문자를 받았습니다. 그동안의 노력이 결실을 맺은 듯하여 적지 않은 성취감을 느꼈습니다. 이후 실력 있는 개발자로 성장하기 위해 지속적으로 공부함에 있어서 '할 수 있다'는 자신감의 원동력이 될 경험이지 않을까 싶습니다.
'기록' 카테고리의 다른 글
근황 (0) | 2023.04.04 |
---|---|
알고리즘 문제해결전략(종만북) DP에 대해서 (0) | 2023.02.22 |