취업을 위한 코딩테스트 공부방법
부제: 알고리즘 바보의 취준을 위한 코테 공부방법
지난 취준생 시절 포털사이트, 카드사 등등 20곳 넘게 코딩테스트에서 불합격하였습니다. 코딩테스트 공부는 취준 기간 가장 많은 시간을 할해한 부분이였습니다. 코딩테스트 합격 이후 면접을 진행하면 6곳 중 5곳은 최종 합격까지 갈 정도로 포트폴리오와 면접에 자신이 있었지만, 코딩테스트는 커다란 벽이었습니다.
알고리즘 공부방법 블로그 글을 보면서 200문제 풀어도 합격 못하는데 자괴감에 빠지고, 코딩테스트가 끝나고 취업 단톡방에서 올솔(전부다 풀음)하는 분들을 보면서 자존감 바닥을 치곤 했습니다.
무엇보다 힘들게 자기소개서까지 작성하였고 기술적으로 보여주고 싶은 것이 많았는데 2시간의 코딩테스트를 통과하지 못하여 자소서가 전달되지 못하는 건 너무나 슬프고 힘들었습니다.
코딩테스트를 위한 알고리즘 공부는 그 범위와 난이도에 대해서 끝이 있는 공부입니다. 제 방법이 정답이 아니지만, 저와 같이 취준을 위해 알고리즘 공부에 힘들어하는 분들을 위해 이 글을 남깁니다.
글을 시작하기 전에 저에 대해서 알 수 있는 글을 남깁니다.
📣 공지: 코딩테스트 완벽 정복 로드맵 공개!
기초를 튼튼히
코딩테스트 언어에 대한 숙달
코딩테스트 처음 시작한다면 오토마타님의 C++ 배우기 문제집을 추천합니다. 이 문제집을 통해서 배워야할 것은 다음과 같습니다.
- 코딩테스트를 위한 '실전용' 입력 처리방법
- 시간, 공간복잡도에 대한 이해 고려한 기초 알고리즘 설계
- 배열, for, if 조작을 통한 기초 알고리즘 설계
- 기본적인 내장함수 사용방법
for i in range(int(input())):
inputStr = input()
arr = list(inputStr)
MAP.append(arr)
▲ Bad Code
MAP = [list(map(int, input().split())) for _ in range(int(input()))]
▲ Good Code
위의 코드와 같이 코딩테스트를 위한 코드 혹은 Pythonic한 코드 작성법에 적응하는 시간입니다. 이 단계에서 오래 고민하는 것은 크게 도움이 안될 수 있습니다. 타인의 코드를 보면서 더 좋은 코드 스타일을 빠르고 짧은 시간에 집중적으로 학습하는 것을 추천합니다.
저는 이 과정을 통해서 다음과 '용감하게 시작하는' 시리즈 글을 작성하였습니다.
기초를 위한 문제집입니다. 제출 1000명 이상인 문제 정도 풀면 됩니다. 지나치게 수학적인 문제는 넘어가도 좋습니다.
뼈대문제로 알고리즘 익히기
아래 추천하는 책 혹은 강의를 통해서 알고리즘 기본 연습을 하기 전에 기억 저 넘어에 있는 알고리즘 지식을 불러와야 합니다.
알고리즘 바탕으로 특정 문제에 적용하는 연습을 해야합니다. 그 전에 1, 2년전 수강했던 알고리즘이 기억이 안 나면 시작도 못 할 것입니다. 과거 기억을 불러오기 위해서 엔지니어 대한민국 채널을 추천합니다.
저는 특정 알고리즘을 적용하면 바로 풀리는 쉽고 풀기의 기본이 되는 문제를 뼈대 문제라고 부릅니다. 저학년 알고리즘 지도를 하면 Stack 문제에서 손수 List를 직접 만들고 포인터로 연결해서 알고리즘 문제를 해결하는 것을 봅니다. 하지만 입사를 위한 코딩테스트에서는 deque()
내장함수를 팍팍 사용해서 구현해야 합니다.
뼈대 문제에서 너무 많이 고민하는 것은 느린 길이 될 수 있습니다. 자신의 풀이, 타인의 풀이를 보면서 깔끔한 코드를 연습해보세요.
책
알고리즘 문제해결전략(1권, 2권)의 책은 취준을 위한 코딩테스트를 공부한다고 하면 주위에서 가장먼저 추천하는 책입니다. 좋은 책이지만 코딩테스트 범위를 벗어나는 심도있는 문제와 주제가 많이 나옵니다. 대학교 2, 3학년이 여유있게 ACM-ICPC 대회를 준비하는겸 본다면 추천할 책이지만 취준을 위한 코딩테스트를 시작하는 사람에게 추천하기는 어려운 책입니다.
카카오 채용 코딩 테스트 출제 위원회 소속으로 오랜 기간 개발자 채용에 참여하신 분입니다. '이것이 취업을 위한 코딩 테스트다 with 파이썬' 일명 동빈북이 있지만, 그 책보다는 상길북을 추천합니다.
우선 같은 문제, 쉬운 문제를 4~5가지 방법으로 다양하게 해결하는 점이 인상적입니다. 책의 풀이 코드는 Pythonic합니다. 딜리버리히어로코리아를 포함한 다양한 기업에서 코딩테스트의 문제를 다 풀었지만 Pythonic하거나 코드의 convention이 좋지 못한 경우 코딩테스트를 통과하지 못하는 것을 봅니다. 이를 준비할 수 있는 좋은 책입니다
강의
인프런? 패스트캠퍼스? 알X리XX스? 코드플러스?
일단 알고리즘을 위한 좋은 강의는 타인이 하는 강의가 아닌 본인입니다. 인프런, 패스트캠퍼스, 그리고 비싼 금액을 자랑하는 알X리XX스가 있습니다. 일부 강의는 직접 사거나 간접적으로 후기를 들어보았지만, 논리 응용능력이 필요한 문제의 능력을 향상하는 방법은 수능 공부할때 혹은 수 천년전 공부 방법에서 크게 벗어나지 않습니다.
이해될 때까지 생각하고, 본인이 이해한 방법으로 문제를 설명하는 것. 문제를 해결한 사람은 어떻게 생각해서 문제를 해결했는지 충분한 시간을 갖는 것입니다.
그러나 기초적인 단계에서 어떻게 생각을 해야 하는지, 문제를 어떻게 바라봐야 하는지 접근방법이 없는 분은 기초적인 강의를 수강하는 것을 추천합니다. 다음 유, 무료 그리고 오프라인 강의를 추천합니다.
T-Academy 강의입니다. 강의하시는 페이스북 '알고리즘에 고통받는 취준생을 위한 안내서'를 운영하시는 분입니다. 기업 코딩테스트 범위에 100% 일치하고 이 범위를 벗어나는 알고리즘에 대해서 강의를 들을 필요가 있을까 생각이 듭니다. 이보다 심화 알고리즘은 구글링 + 관련 뼈대문제 풀이를 하면 충분할 것입니다.
CodePlus 강의입니다. 알고리즘 기초가 없거나 C++로 시작하시는 분들에게 추천합니다. 그러나 중급 이후의 강의는 추천하지 않습니다. 코딩테스트 범위를 벗어난 문제도 많고(알아서 필터링해야할,,) 문제 풀이를 바로 시작합니다.
블로그에 포스팅된 글을 Youtube 영상으로 옮기셨습니다. 블로그에 알고리즘 연재 및 추천문제가 잘 나와있으니 참고하세요!
오프라인 강의로는 들을 기회가 생기면 무조건 SDS 알고리즘 특강에 참석하는 것이 좋습니다. 맛있는 삼성 밥과 함께 좋은 환경에서 종일 알고리즘을 빡세게 공부할 수 있는 환경을 경험할 수 있습니다.
코딩테스트 스터디
강의보다 제일 도움이 되는 것은 스터디입니다. 코로나가 심해진 이후로 온라인 스터디에 참석했습니다. 같은 문제를 풀어도 다양한 접근방식을 배울 수 있습니다. 또한, 문제풀이 설명이 정말 까다롭습니다. 꼼꼼하게 설명하다 보면 어느 순간 면접 준비도 자동으로 되어있을 것입니다.
온라인 토론
항상 1500명 풀방을 유지하고 있는 온라인 알고리즘 스터디 방입니다. 알고리즘 풀다가 어려운 부분을 올리면 많은 분들이 적극적으로 도와주십니다. 가끔 갓 분들이 스터디를 모집을 하기도합니다.
유명기업들의 코딩테스트가 끝나면 문제를 어떻게 풀었는지 토론(정확한 문제 공유는 위법입니다.) 몇솔했는지 투표가 이루어집니다. 보면서 세상은 넓고 잘하는 분들은 많다는 걸 체감합니다.
카카오톡보다 접근성은 떨어질 수 있지만 유사한 성격의 백준 슬랙이 존재합니다.
합격하기 전까지 연습, 연습
어떤 코딩테스트를 대비하기에 좋은 문제인지 판단하기 쉽지 않습니다.
취준 단톡방에서 소개를 받아서 "코테코텟" 그룹에 가입하였습니다. 여기서는 주제별로 문제를 자유롭게 추천하는 곳입니다. 어려운 문제를 올솔한 분들을 보면서 자극을 받으며 공부할 수 있습니다.
모든 기업들이 코딩테스트 문제를 직접 내지 않습니다. 일정 금액을 주고 문제를 의뢰하는데 유사코(USACO) 일부 문제가 어느 정도 대비하기에 도움됩니다.
코딩테스트를 보고 나면 어떤 문제가 나왔는지 복기해보세요! 그리고 그 문제를 해결하기 위해서 백준의 어떤 문제와 유사한지, 같은 아이디어를 사용한 문제가 무엇인지 찾아보세요. 이런 작업을 한 다음 💊 코딩테스트 고득점 kit 의 글에 모아두었습니다. 코딩테스트 대비를 위한 백준 문제 추천 글도 확인해주세요!
카카오를 노리지 않더라도 프로그래머스의 카카오 기출문제를 풀어볼 것을 권합니다. 개발을 잘하는 사람을 찾겠다는 의도가 보이는 문제가 많이 있으며, 많은 코딩테스를 경험하면서 카카오 코딩테스트 스타일을 따라 하는 경우가 많습니다.
SQL
프로그래머스 데브매치, SK CNC, NTS, 가비아 등등 몇 안되는 회사에서 SQL 문제를 만날 수 있습니다. SQL이 코딩테스트로 나오면 SELECT 그 중에서 JOIN 정도 나옵니다. 프로그래머스 고득점 Kit, 그리고 Hacker Rank에서 JOIN을 중심으로 풀면 SQL 문제를 맞힐 수 있습니다. 코딩테스트에서 제일 어렵지 않은 부분입니다.
대학교에서 데이터베이스 과목을 수강하지 않아서 불안하다고 한다면 Goorm Edu. SELECT ALL FROM SQL 무료 강의를 추천하겠습니다.
마무리
코딩테스트 탈락하며 취준 기간이 길어지며 불안감에 불면증이 오기도했습니다. 그럴 때마다 오히려 공부의 기회로 생각하고 새벽 4시 넘어서까지 알고리즘 하나하나 풀어나갔습니다. 개발자 인생을 시작하기 전에 포기하고 싶지 않았습니다.
불가능은 없습니다. 합격하기 전까지 계속 도전하면 100% 확률로 성공합니다.
막연하게 책상머리에서 종이와 펜을 꺼내 들고 알고리즘 문제를 푸는 여러분들을 응원합니다.