-
(필기시험)
개발자 채용 과정에서 필기시험을 보는것은 매우 드문 케이스인데 유일하게 라인 플러스 공채에서만 필기시험을 본다. 코딩테스트가 대중화되기 이전에는 필기시험을 많이 봤었다. 아마도 예비 신입 개발자들을 대상으로 코딩 실력이외에 실무에서 필요한 이론적인 지식을 얼마나 갖추고 있는지 확인해보고자 하는 의도인것 같다.
경험상 필기시험의 문제 범위는 컴퓨터 공학 전공지식 (프로그래밍, 논리설계, 컴퓨터구조, OS, 알고리즘, 데이터구조, 네트워크, DB, 지원 분야 관련 기본 지식) 단순히 정보처리기사 수준의 암기를 통해서 풀수 있는 문제도 출제되지만 거기에 더해서 조금 더 심화된 내용이 출제된다. 전공지식을 실무(개발)에 연관지어서 출제하는 문제도 나온다. (OS 동기화 문제 관련 코드에서 문제점 찾기 등)
지원 분야 관련 기본지식 같은경우에는 해당분야에 대해서 프로젝트를 진행해본 경험이 있으면 대부분 맞출수있는 난이도의 문제가 출제된다. 해당 분야 관련해서 기본지식(키워드별로)을 잘 정리해서 공부하면 좋겠다.
단기간동안 저 모든 내용을 다 볼수는 없기때문에 정보처리기사 자료등을 통해서 평소에 공부했었던 범위들을 정리하고 중요하다고 생각되는 부분들만 정리해서 전공수업자료로 조금 더 공부하는 방법이 좋은듯 하다.
최근에는 필기시험을 보는 IT 서비스 회사가 많지 않아서 관련한 자료가 많지 않기 때문에 기출문제나 범위를 가정하는것이 어렵다. 최대한 평소에 전공수업을 잘 들어 놓는것이 제일 큰 도움이 될것같다.
-
코딩테스트
채용과정에서 코딩테스트는 지원자가 주어진 문제를 얼마나 잘 이해하고 이것을 적절한 데이터구조나 알고리즘을 활용해서 제약조건아래 문제를 해결할수있는 능력이 있는지를 평가하는 단계이다. 사실 코딩테스트 문제를 잘 푼다고해서 실무에서 일을 잘한다는 보장은 없다. 오히려 알고리즘 문제는 잘푸는데 실무 능력이 부족해서 막상 실무에서 고생을 많이 하는 케이스도 많다. 꽤나 논란이 있는 평가 방법이지만 현실적으로 코딩테스트만큼 효율적으로 기초적인 개발능력을 가늠할수 있는 다른 방법이 없기 때문에 많은 기업들에서 채용과정에 도입하고 있다. 다수를 대상으로 테스트를 진행하고 합격자/불합격자를 구분해야하기 (변별력) 때문에 어느정도는 난이도 있는 문제가 출제된다. 다만 부작용을 최소화 하기 위해서 합격 풀은 어느정도 넓게 잡는것 같다. 많은 경우에서 3 문제 중 2 문제, 5 문제 중 4 문제를 완벽하게 풀어서 제출하면 코딩테스트는 합격선이라고 볼 수 있다. 난이도에 따라서 기준이 달라질 수는 있다.
-
언어 추천
프로그래밍 언어는 경험이나 취향에 따라서 많이 달라지는것 같다. 하지만 특별히 특정언어로 알고리즘 문제풀이를 준비해본 경험이 없다면 python을 추천한다. python을 이용하면 로직을 매우 깔끔하게 코딩해낼 수 있다. 문제 풀이에 도움이 되는 여러 툴들도 기본 라이브러리로 지원이 된다. (binary search, combi, permute, heap 등) 잘 이해하고 사용한다는 가정하에. python에 익숙해지면 문제 해결 로직에만 집중해서 풀어나갈 수 있어서 좋다. 그리고 서비스 기업에서는 코딩테스트에서 대부분 사용가능할것이다.
다음으로 추천할만한 언어는 Java인데 학교에서 대부분 많이 접해보았을 언어일것이고 대부분의 기업에서 지원을 하기때문에 큰 걱정이 없다.
가끔씩 직군에 따라 사용할 수 있는 언어가 제한되는 경우도 있다. 이부분은 잘 알아보고 해당 언어로 준비하면 좋을것 같다. (iOS -> Objective-C/Swift, Android -> Java/Kotlin, Web Front -> Javascript)
언어별 성능은 고려할 필요가 없다. 각 언어별로 답안 코드가 있기때문에 실행시간이나 메모리사용량을 고려해서 채점된다.
-
코딩테스트 플랫폼
예전에는 각자 다른 다양한 플랫폼들을 사용했던것 같은데 최근에는 프로그래머스(https://programmers.co.kr/) 코딩테스트 플랫폼을 많이 사용하는것 같다. 프로그래머스에서는 여러 기업들의 기출문제들 포함 다양한 문제들을 연습해볼수 있기 때문에 해당 사이트에서 연습을 해보는 것도 좋을것 같다. 다만 연습의 경우 풀이 코드를 제출하면 해당 문제에 대한 모든 입력 케이스를 테스트해서 정답결과를 알려주지만 실제 코딩테스트에서는 3-5개 정도의 테스트케이스만 주어지고 실제 평가단계에서는 히든케이스를 포함한 정오답결과로 평가된다.
-
코딩테스트 문제 유형 전반적인 난이도 순서대로 구현(시뮬레이션), 완전탐색(BFS, DFS), 정렬, stack/queue 활용, heap 활용, tree 활용, 그리디 알고리즘(해시), 다이나믹 프로그래밍 (DP), 이분탐색 (출제빈도 낮음), 그래프 (출제빈도 낮음) 유형의 문제가 출제된다.
5문제 기준으로 1번 문제 쉬운 난이도, 2/3/4번 문제 중-중상 난이도, 5번 어려운 난이도의 문제가 출제된다고 보면 될것같다. 이론적으로는 어려운 난이도의 문제는 잘 풀지 못해도 코딩테스트는 통과할 수 있는 가능성이 있다는 이야기이다.
삼성전자 코딩테스트는 어느정도 유형이 정형화되어있다. 2문제가 출제되며 완전탐색 1문제, 구현 1문제가 출제된다. 매년 출제 유형도 유사한 편이다. (https://www.acmicpc.net/workbook/view/1152) 링크 문제들을 많이 풀어보면 도움이 많이 된다.
-
준비 방법
학교에서 자료구조와 알고리즘 강의를 충실하게 수강했다는 가정하에- (각 자료구조/알고리즘의 공간/시간 복잡도를 이해하고 어떻게 구현되는지 알고하고 있음, 부족하다고 느껴진다면 당장 전공수업 자료를 다시 꺼내보던가/kocw를 통해서 다시 공부하자)
알고리즘 문제를 풀어볼수 있는 플랫폼 1~2개 정도를 정해서 (프로그래머스, 백준, SW Expert Academy) 쉬운문제부터 다양한 유형의 문제를 풀어나간다. 최소 각유형별로 10문제 이상씩 풀어보자 (다다익선)
처음에는 문제를 읽었을때 어떤 자료구조나 알고리즘을 이용해서 풀어야하는건지 모르겠거나 풀었는데도 실행시간 초과가 나오는 경우가 많다. 이럴때는 필히 최소 1시간 정도는 혼자 이런저런 풀이법을 생각해보고 그 뒤에도 해결이 되지 않는다면 다른 사람의 코드를 통해서 어떻게 풀어야하는것인지 이해하자. 그렇다고 코드만 복붙해서 통과하고 그 풀이를 완벽하게 이해하지 않으면 실력이 늘지 않는다.
한번 풀어본 코드는 리팩토링을 하거나 나중에 다시한번 풀어보기를 통해서 더 기억에 선명하게 남길 수 있다.
코딩테스트 준비를 처음 시작한다는 가정하에 최소 1-3달은 어느정도 집중해서 준비해야 어느정도 합격선이상 해결할 수 있는 실력이 갖추어 질 수 있을것 같다. 당장 취준 시즌이 닥치기 전에 미리 준비하는것도 좋다. (1일 1문제 풀기 등)
-
코딩테스트 응시 팁
-
코딩 테스트를 시작하자마자 모든 문제를 훑어본다. 각각 문제별로 유형을 맞추어보고 난이도 순서대로 풀어나간다.
-
연습장은 필수 백지나 노트는 꼭 지참할것, 자료구조/알고리즘/케이스 정리 용도
-
제대로 풀수 없을것 같은 문제가 1-2개 남았고 시간도 길게 남지 않았을 경우에는 차라리 완전히 풀었던 앞 문제들의 코드를 정리/리팩토링/주석달기 하는것이 좋다. 코딩테스트에서 제출한 문제는 면접에서 풀이 방법에 대한 설명을 요청할 수 있기때문에 깔끔하고 가독성 좋게 코딩을 하는 것이 좋다. (단문자 변수명 지양하기, 로직 메소드 단위로 나누기 등등)
-