안녕하세요. 게임클라이언트로 근무하고 있는 두부입니다. 최근 홍정모 교수님이 알고리즘의 중요성에 대해 많이 이야기해주셨는데, 제가 이번에 쓰는 대상은 교수님이 말씀하신 근본적인 알고리즘과는 거리가 좀 있을지 모르겠지만, 그래도 코딩테스트 문제풀이를 준비하시는 분들에게 저의 경험과 공부방법을 공유해보고자 이런 글을 작성하게 되었습니다.
평소 조금씩 알고리즘을 공부해오다가 어느날 이직이 하고싶어서 국내 이런저런 회사에 코딩테스트를 봤는데 보는 곳 마다 합격해버리고 심지어 한 회사에서 제가 코딩테스트 제일 잘 본 편이라는 말까지 듣게되는 경험을 하게 되었습니다. 제가 본 회사중에 코딩테스트 컷이 높은 회사가 없기도 하였지만.. 뒤늦게 알고리즘 시작한 사람으로써 이렇게 공부하고 이정도 결과를 만들었다는 걸 공유하고 싶어서 글을 작성해봅니다.
-> 커뮤니티에서 네카라 뒤에 붙이던 기업 중 한곳
-> 넥스트 유니콘 AI 스타트업 100 기업 중 한곳
-> 2021년 개발자 연봉대란 기업 중 한곳
저는 인터넷에서 찾은 블로그들을 통해 공부를 진행하였습니다. 이전에 유튜브 등에 퍼져있던 영상강의들은 지루하기도 하고.. 뭔가 저한테 맞는걸 찾기 힘들어서 특정 강의를 보고 따라하려다 오히려 공부를 안하게 되는 일들이 반복되었습니다. 그러던 중 설명도 너무 잘해주시고.. 무엇보다 코드 자체를 너무 아름답게 잘 짜시는 분들을 발견하여 이 분들의 코드를 보며 알고리즘을 공부하기 시작했습니다. 주로 참고한 블로그들은 다음과 같습니다. (저는 아래 블로그를 순서대로 보지는 않았지만, 공부하시는분 입장에서는 1번부터 보시는 것을 추천드립니다)
1. 바킹독 블로그(BaaaaaaaarkingDog)
처음 문제풀이를 시작했을 때, 이 분의 수학적인 접근방식을 보고 감탄을 했던 기억이 납니다. 매번 혼자 백준에서 아무 문제나 잡고 고민하며 풀다가, 이 분의 코드를 보고 충격받아 다른 사람의 코드를 보고 공부하는 것을 시작하게 되었습니다. 바킹독 님은 유튜브에 강의 영상도 올리고 계시고, 오픈채팅방과 디스코드 방에서 사람들과 자주 소통도 해주시는 분입니다. 강의보다는 글을 선호하는 편이라 블로그를 주로 참고하긴 하지만, 가끔 글만 봐서 잘 이해되지 않을때는 올려주신 강의를 참고하기도 하였습니다.
'0x00강 - 오리엔테이션' 글에서 자기소개, 강의소개, 코딩테스트에 대한 정보를 꼼꼼하게 정리해주셨으니 해당 글부터 읽어보시는걸 추천드립니다.
2. 박진한 블로그(jinhan814)
정말 무서울 정도로 많은 문제를 푸시는 분입니다. 블로그 리스트중 'Junhan's Note' 라는 게시판이 있는데 엄청난 퀄리티의 설명과 코드들이 모여있어 가장 많은것을 배운 블로그 입니다. 한참 알고리즘을 공부할때 많이 참고했던 블로그라 저의 문제풀이 스타일에 가장 큰 영향을 주신 분입니다. 단순히 문제풀이를 넘어 프로젝트 코드에도 진한님의 코드를 응용해서 사용하고 있기도 합니다.
3. 라이 블로그(kks227)
가장 오래되서(?) 옛날부터 조금씩 봤던 블로그입니다. 바킹독님의 코드를 보고 알고리즘 공부 글을 찾다가 라이님 블로그로 왔던 것 같습니다. 게시판 이름이 '대회알고리즘'이라 코딩테스트 준비하는 사람들에게는 너무 투머치한 어려운 알고리즘들이 많이 보입니다. c++의 문법에 대해서도 잘 정리를 해주셔서 c++의 기본 문법처럼 가장 기초적인 부분은 해당 블로그에서 공부했었습니다. 저는 이 블로그부터 봤었지만 1->2->3 순서로 보시는 것을 추천드립니다.
4. 문제집
위 세 블로그에도 많은 연습 문제들이 있지만.. 해당 문제집에서도 가끔 문제를 찝어서 풀기도 하였습니다.
5. 프로그래머스 - 실전연습
위 1~4번부터의 문제집들의 공통점은 대부분의 문제가 백준에 있고, 해당 알고리즘이 어떤 알고리즘이 필요한지 알고 문제풀이를 시작한다는 것입니다. 하지만 실전에서는 어떤 문제가 어떤 알고리즘을 이용한 문제인지 알려주지 않고, 시간제한이 있습니다. 그래서 코딩테스트를 연습하는 최고의 방법은 실제로 코딩테스트를 보는 것입니다. 주어진 시간 안에 문제의 유형을 알지 못하는 상태로 문제를 푸는 연습이 되셔야 합니다. 문제를 완벽하게 풀지 못하고 조금이라도 풀어내는 것을 '긁는다' 라고 표현하는데, 아는 문제는 최대한 빨리 풀고 모르는 문제는 조금이라도 긁어서 최대한 합격 가능성을 올리는 것이 중요합니다.
하지만 언제나 코딩테스트를 볼 수는 없죠. 이를 대비하기 위해 코딩테스트와 최대한 비슷한 환경을 구축할 수 있는 문제 사이트가 있는데 바로 그 유명한 프로그래머스입니다. 실제로 이 사이트에서 수 많은 기업들의 코딩테스트 문제풀이 환경을 제공해주기도 합니다. 프로그래머스에서는 실제로 코딩테스트 문제집 전체를 제공해주기도 하는데(특히 카카오), 이를 이용하여 '문제 유형을 보지 않고, 실제 테스트와 똑같은 시간 제한을 두고' 한 문제집을 전부 풀어보는 훈련을 해보는 것을 추천드립니다.
---
국내 게임이나 관련 회사에서 요구하는 코딩테스트 난이도가 크게 높은 것 같지는 않습니다. 물론 선형대수 지식을 요구하는 문제들이 한개씩은 있었어서 관련 경험이 없는 분이라면 어려울 수도 있으나 벡터의 내적, 외적에 대한 기본적인 개념을 알고 코드로 응용할 수 있다면 모두 쉽게 풀 수 있는 문제였습니다. 게임이나 그래픽스 공부를 하셨다면 큰 어려움 없이 푸실 수 있을 것이였습니다.