본문 바로가기
Dairy/Drawer

삼성 SW 검정시험 가이드 Professional, Expert

by OKOK 2017. 8. 6.

삼성전자


소프트웨어직이 하는 일이 궁금합니다.

소프트웨어직의 경우엔 크게 세 가지로 나누어져 있습니다. System SW, Middleware SW, Application SW입니다. System SW의 경우 디바이스 드라이버, 커널, 그래픽스, 전력관리, 부트로더, 전송 프로토콜, 멀티미디어, 메모리 관리 등입니다. Middleware SW의 경우 유저인터페이스, 멀티미디어, 네트워크, 웹 Connectivity, 방송, 서비스 프레임워크 등입니다. Application SW는 안드로이드, 타이젠, 윈도우, 리눅스, IOS, 웹 등을 개발합니다. 이외에도 인공지능 SW, 보안 SW, 서버 SW 등을 담당하게 됩니다.


근무 환경이 궁금합니다.

자율출퇴근제를 시행하고 있습니다. 저희는 현재 제조 회사에서 소프트웨어 회사로 탈바꿈하고 있습니다. 이전의 보수적인 이미지를 탈피하기 위해서 도입한게 자율출퇴근제입니다. 8시 출근 6시 퇴근 이렇게 정해진 게 없고 언제든 출근하면 됩니다. 주 40시간만 채우면 됩니다.



삼성 SW 검정시험 가이드 Professional, Expert


오랫동안 프로그래밍 경시대회를 준비하였으며, 2015년부터 삼성전자 인재개발원에서 Expert 대비반과 professional 대비반 실습 교육 강사를 하였습니다. 그동안의 경험을 바탕으로 직원분들이 문제해결능력과 구현능력을 키울 수 있는 방법에 대해 기술해보고자 합니다. 


professional 난이도 이상의 시험을 준비할 때에는 단순하게 문제 유형 암기 또는 코드 암기로 통과하기란 사실상 불가능합니다. 시험을 준비하는 과정에서 느끼셨겠지만, 세상엔 수많은 알고리즘들이 존재하고 일반적으로 널리 알려진 알고리즘들은 그 중 가장 기본이 되는 몇가지 일부에 불과합니다. 즉, 모든 문제 유형들을 접하기엔 시간이 부족한 것이 현실입니다. 


알고리즘의 특성상, 단 하나의 조건이 변형되거나 삽입, 삭제 됨에 따라 답의 정당성이 무너지거나, 시간복잡도가 비이상적으로 증가하게 됩니다. 따라서 기본적인 알고리즘에 대한 깊은 이해가 없으면, 엉뚱한 상황에서 잘못된 으용을 하여 참담한 결과를 받기 쉽습니다. 


학부 과정 혹은 사내 교육 과정 중에 배우는 자료구조와 알고리즘에 대한 깊은 이해가 필요합니다. 해당 알고리즘 혹은 자료구조의 정의, 수행 과정, 복잡도 분석 등등에 대한 심도 있는 고찰이 요구됩니다. 그리고 자주 쓰이는 자료구조나 알고리즘은 코드를 여러 번 작성해보면서 익숙해지는 과정이 필요합니다. 대표적인 예시로 힙이 있습니다. 힙을 자유자재로 다룰 줄 안다면 우선 힙 정렬을 할 수 있게 되고,  Diikstra 알고리즘에도 응용할 수 있으며, 기타 문제를 푸는 도구로도 사용할 수 있습니다. 또한 Linked List나 간선 배열을 재가공하여 그래프를 탐색하는 법은 실제 업무에도 많이 쓰일 수 있으므로, 간결하고 확장성 넓게 쓸 수 있도록 코드 패턴을 정형화 해두는 것이 좋습니다. 


다양한 문제를 접하여, 본인이 스스로 알고리즘을 고안해서 구현까지 하여 문제를 해결합니다. 문자게 가진 고유한 특성과 조건들을 활용하여 본인이 직접 알고리즘을 고안해보아야 합니다. 문제에서 주어진 상황을 본인이 직접 그래프로 모델링 해본다던가, 그래프로 모델링 하였을 때에 최단거리를 구해야하는데 그 때 Dijkstra 알고리즘을 사용하면 되겠다던가, 수행시간을 더 줄이기 위해 힙을 써야겠다는 생각을 할 수 있겠습니다. 혹은 힙 구현에 자신이 없다면 본 블로그에 있는 SPFA를 구현할 수도 있겠습니다.


구현 능력이 있습니다. 본인이 고안한 알고리즘을 정확하고, 수행시간이 짧도록 신경 써서 짧은 시간 안에 구현하여야 합니다. Professinal과 Expert 두 시험 모두, 정확하게 코딩하는 것이 가장 우선시 됩니다. 시험 시간이 넉넉하기 때문에 알고리즘ㅈ 고안에만 너무 시간을 할애하지 않는다면, 구현할 시간을 충분할 것입니다. 그 다음으로 본인의 코드 수행시간에 주의해야 합니다. 입력의 크기가 매우 클 수 있음에 주의하지 않는다던가, 전처리를 하여 결과를 저장해두면 반복적으로 계산핳 필요가 없음에도 그러지 않았다던가 하는 경우가 있을 수 있겠습니다. 


문제를 잘 읽어야 합니다. 빠짐없이 꼼꼼하게 읽어서 문제를 완벽히 이해하고, 조건들을 하나도 놓쳐서는 안됩니다. 놓친 하나의 조건으로 인해 최종 채점 결과가 0점이 되는 것은 한 순간입니다. 혹은 엉뚱한 문제를 시험 시간 내내 푸는 경우도 가끔 있습니다. 문제 정독의 중요성은 몇 번 강조해도 지나치지 않습니다.


할 수 있는 최선을 끝까지 다 하여야 합니다. 어떻게 풀어야 할 지 잘 모를 때는, 문제의 크기가 작을 때부터 손으로 이런저런 방법들을 시도해보며 규칙을 유도한다거나 패턴, 성질 등을 찾아보려 노력해야 합니다. 시험 시간을 남기고 다 끝냈다고 판단되더라도, 끝까지 데이터를 손으로 직접 만들어서 넣어보거나, 가장 큰 데이터를 프로그램을 짜서 만들어서 넣어본 후 제한시간을 초과하지 않는지 확인해보아야 합니다. 만약 최대 데이터에 대해서 너무 느리게 나온다면, 이전까지 작성한 코드를 다른 곳에 안전히 보관해 둔 후, 시험이 끝나기 전까지 최적화 작업에 몰두하시면 됩니다. 


문제의 조건이 불분명한 경우에는 감독관에게 알린 후, 문제에 대한 질문을 꼭 하여 의문점을 해결해야합니다. 문제를 처음부터 끝까지 5번 정도 정독하였는데도 이해가 안되는 부분이 있다면 문제 기술에서 빠진 부분이나 비문이 섞여있는 것이므로 반드시 확인해야 합니다.