본문 바로가기

My record/Writing

<취준> 코딩테스트 준비하기 (with. 백준 & 프로그래머스)

 

1. 소개

 최근 코딩 테스트 준비 어떻게 했냐, 알고리즘 어떻게 공부하냐, 코테 대비 어떻게 했냐 등의 질문을 자주 받고 있다. 그래서 필자가 취업 준비를 하던 당시에 했던 방식을 바탕으로 공부방법을 공유해보려고 한다. 마지막에 추가팁도 있으니 끝까지 읽어주길 바란다. 취준 때 이것저것 알아보며 시간을 날린 경험이 많기 때문에 이 글이 여러 사람에게 도움이 되었으면 좋겠다.

 

 알고리즘이나 코딩테스트를 완전히 처음 접하는 사람이라면 어느 정도까지 준비를 해야하는지조차 막막하고 난이도가 와닿지 않을 수 있다. 어느 정도 수준까지 해야하는지는 가장 하단에 따로 설명해두었지만 굳이 비교하자면 수능 수학과 비교할 수 있겠다. 알고리즘을 수학이라고 비유했을 때, 필자는 수능 수학 3점짜리 문제를 풀 수 있는지를 보는 시험이라고 느꼈다. 문제를 꾸준히 풀어왔고, 알고 있는 지식에 대해 활용이 가능한 수준이냐만 본다는 것이다. 4점짜리 문제도 종종 나오지만 못푼다고해서 지장은 없다. 결론은 문제를 꾸준히 풀자.

 

 알고리즘 문제를 풀 수 있는 사이트는 정말 다양하지만 그 중에서 백준프로그래머스를 추천한다. 백준 온라인 저지의 경우 국내 PS사이트 중 가장 많은 문제가 있지 않을까 생각한다. 게다가 알고리즘 유형별로 분류가 매우 잘 되어있고, 자신의 티어나 문제 난이도 티어를 확인할 수 있어서 편리하다. 프로그래머스의 경우 채용 관련 정보를 얻을 수도 있고, 대부분의 기업 코딩테스트가 프로그래머스 플랫폼을 사용하므로 꼭 경험해봐야 한다. 아래의 글을 읽기전에 이 2개의 사이트를 먼저 가입하길 권장한다.

 

 참고로 노파심에 한마디 써보자면 코테보다는 자신의 도메인에 대한 능력과 관심도가 훨씬 중요하다고 생각한다. 코딩테스트에 너무 올인하지 않길 바란다. 실제 기업에서 관심이 있는 것이 무엇일지 한번쯤 다시 생각해보자.

 

2. 설정

* 백준 기본 설정

 

 - 이 부분은 굳이 하지 않아도 되지만 백준에 가입했다면 설정에 들어가서 조직 정보를 먼저 등록하자. 이를 통해 문제를 풀 자극을 받을 수 있다. 백준 사이트 상단의 랭킹에 들어가게 되면 본인이 속한 조직의 랭킹을 확인할 수 있다. 조직을 클릭하면 본인이 조직내에서 몇 위인지 볼 수 있다. 필자의 경우 학교내 100위를 목표로 먼저 문제를 풀었었다.

 

 

 - 위와 같이 본인이 자주 쓰는 언어를 등록해두면 문제 풀이시 편하게 고를 수 있다. 참고로 JS를 쓴다면 node.js를 선택해야 한다. JS는 터미널에서 돌 수 있는 언어가 아닌 웹에서 동작하는 언어이기 때문이다. 백준은 JS가 주언어인 사람들에게 불친절하고 어려울 수 있는데 이 부분은 가장 하단에 팁에서 다루도록 하겠다.

 

 - 추가적으로 소스 코드 공개설정을 해두자. 필자는 맞았을 때만 공개를 선택해두었다. 틀린 경우 공개할 필요는 없다고 생각했고, 맞을 경우 다른 사람들과 풀이를 공유하는 것은 건전한 개발문화에 기여하는 것이라 생각했기 때문이다.

 

* 백준 티어 설정

 - 백준에서 문제를 푼다면 정말 필수 설정이라고 생각한다. 설정에서 solved.ac를 클릭하자.

 

 

 - solved.ac는 필자가 백준을 처음 시작할 때만 하더라도 분리되어 있는 서비스였는데 현재는 백준에 완전히 편입?되었다. 

 

 - 연동을 활성화 시키면 solved.ac에서 본인의 티어와 클래스를 위와 같이 확인할 수 있다. 티어는 브론즈 > 실버 > 골드 > 플래티넘 > ... 순으로 올라가며 각 티어별로 5부터 1까지 승급한다. 높은 난이도의 문제를 풀수록 수치가 빠르게 올라간다. 

 

 - 클래스는 높을 수록 좋지만 정해진 문제를 풀어야만 오른다. 정해진 문제는 solved.ac상단의 문제>CLASS를 클릭하여 확인할 수 있다. 필수는 아니지만 좋은 문제들로만 구성되어있기때문에 클래스를 올리면서 티어를 함께 올리는 것도 좋은 방법이다.

 

 

 - solved.ac 연동을 마쳤다면 다시 백준으로 돌아와 위와 같은 설정을 해주자.

 

 - solved.ac 티어를 보기로 활성화 시키면 문제별로 난이도 티어를 확인할 수 있다. 매우 작은 아이콘으로 표시되므로 티어 이름도 보기로 활성화하기를 권장한다.

 

3. 문제 풀이

* 단계별 풀이

 - 본인이 코테 공부나 문제풀이가 처음이 아니라면 이 단계는 건너뛰어도 좋다.

 

 

 - 백준 상단 메뉴의 문제에는 단계별로 풀어보기란이 있다. 

 

 

 - 처음 문제를 풀어보는 사람이라면 여기서 6단계 정도까지 풀어보자. 6단계까지 무난하게 풀었다면 기초 풀이 능력은 갖춰졌다. 참고로 기본 수학은 굳이 풀 필요는 없을 것 같다. 알고리즘이라기 보다는 수학 공식에 가깝다.

 

 - 만일 기초 풀이를 조금 더 해보고 싶다면 코드업에 들어가 기초 100제를 풀어보면 좋다. (C언어, 파이썬 으로 제한되어 있음)

 

* 알고리즘 공부

 - 위 단계까지 거치면 알고리즘을 공부해야할 필요성을 느끼게 된다. 실버정도의 문제만 가더라도 단순하게 문제를 풀면 금새 시간 복잡도에 걸려 시간 초과가 난다거나 도저히 풀이 방법이 떠오르지 않곤 한다.

 

 - 개인적으로 동빈나님의 이코테(이것이코딩테스트다)를 추천한다. 기업 필수 알고리즘 유형들만 모아서 설명하고 있으며, 자주 나오는 문제 유형을 정리하고 있으므로 큰 도움이 되었다. 굳이 책으로 살 필요는 없다. 동빈나님의 유튜브에서 무료강의가 제공되고 있다. (9. 기타알고리즘까지 들으면 충분함) 파이썬에 특화되어 있긴 하지만 공부하는 데 지장은 없다.

 

 - 이코테가 아니더라도 처음 알고리즘을 공부한다면 도서나 강의를 활용하기를 권장한다. 혹자는 그냥 문제를 풀면서 해설로 익히면 안되냐고 할 수도 있다. 하지만 그 방법은 개인적으로 추천하지 않는다. 마치 근의 공식을 모른채로 어려운 2차 방정식 문제를 풀겠다고 하는 것과 같다. 인프런에도 꽤 좋은 강의가 많은 것 같으니 여러가지 방법으로 학습해보자. 필자가 생각하는 필수 알고리즘 유형은 다음과 같다.

 

 

 - 이 중에서도 정말 당장 급해서 5가지 알고리즘만 뽑아달라고 하는 경우도 있었다. 다 중요하지만 그 중에서도 당장 코딩테스트를 앞두고 있다면 DP, 그리디, DFS&BFS, 정렬, 이분 탐색을 1순위로 공부하라고 얘기할 것 같다. 참고로 구현과 스택&큐는 알고리즘이 아니라서 굳이 뽑지 않았을 뿐 0순위 문제 유형이다.  (사실 정렬도 코테에서의 정렬과 정렬 알고리즘은 별개이다. 면접을 앞둔 상황이 아니라면 정렬 유형에서는 sort 함수를 사용하며 문제를 풀어도 무관하다.)

 

 - 알고리즘 유형을 하나씩 배우고 공부할 때마다 백준에서 관련 문제를 꼭 풀어서 활용해보자. 백준 상단에서 문제 > 알고리즘 분류를 클릭하면 유형별로 문제를 풀 수 있다.

 

 - 참고로 문제를 고르는 팁은 맞힌 사람의 인원을 보라는 것이다. 알고리즘 플랫폼은 대부분 답안지를 제공하지 않으므로 풀리지 않으면 검색을 해야 한다. 맞힌 사람이 많을 수록 풀이를 올려두었을 확률이 크다. 검색을 할 때에는 '백준 {문제번호} 언어' 와 같은 식으로 검색하면 쉽게 찾을 수 있다. (ex. 백준 1234 python)

 

 - 문제 난이도는 본인의 티어 +- 2 정도가 적당하다. 기업에서의 난이도는 아래의 추가팁에서 따로 설명하겠다.

 

 - 당연한 얘기겠지만 강의를 다 듣고나서도 꾸준히 문제는 풀어야한다. 필자는 평소에는 1문제씩 풀었고, 코테 날짜가 잡히면 하루 2개씩 풀기도 했다.

 

* 실전 대비

 - 대부분의 기업 코테는 프로그래머스에서 진행되므로 실전에 대비하기 위해서는 프로그래머스 문제를 반드시 풀어봐야 한다. 백준과 달리 문제 수도 적고 알고리즘 분류도 잘 되어있지 않지만 이는 실전도 마찬가지이므로 무관하다. 게다가 문제의 질이 매우 좋다.

 

 - 백준의 경우는 입력을 받는 것부터 출력을 하는 부분까지 작성해야하는 반면 프로그래머스나 다른 플랫폼들은 그 부분들이 생략되어 있다. 그래서 백준만 풀고 코테에 들어가면 당황할 수도 있다.

 

 

 - 페이지 상단의 코딩테스트 연습을 클릭하여 문제를 확인할 수 있다.

 

 

 - 처음에는 난이도 선택에서 레벨1부터 풀기를 권장한다. 레벨을 필터링한 후에는 가장 뒷페이지부터 순서대로 풀어야한다. 최신 트렌드가 반영된 것인지 최근 문제일수록 난이도가 올라간다. 아무래도 5개의 레벨만으로는 난이도를 완전히 표현하기가 힘들지 않을까.

 

 - 굳이 레벨 4까지 풀 필요는 없다. 백준 난이도와 프로그래머스 난이도를 비교해달라는 질문이 종종 보이는데 이 부분은 아래에서 별도로 다루겠다. 필자는 프로그래머스 문제를 약 120개 정도 풀었다.

 

4. 추가 팁

* 난이도 비교

 - 위는 필자가 백준과 프로그래머스를 풀며 느낀 난이도 비교 차트이다. 주관적인 자료이므로 참고만 해주길 바란다. 프로그래머스의 경우는 난이도가 천차만별이라 과하게 낮거나 높은 경우도 종종 있다.

 

* 어느 정도 수준?

 - 아마 이 글을 읽는 사람들이 가장 궁금해하는 질문일 것이다. 그래서 어느 정도 수준이 되어야 하는가. 경험상 프로그래머스 레벨 3까지 풀 수 있다면 기업 코딩테스트는 무난하게 통과할 수 있다. 카카오를 제외하고는 레벨4까지는 아직 안올라간다는 것이 대부분의 평이다.

 

 - 다 맞춰야하냐라고 물어본다면 그건 절대 아니다. 추측컨대 코딩테스트는 너무 많은 지원자를 다 보기 힘들기 때문에 한번 정도 거르기 위한 용도일 것이다. 대기업 공채의 경우 절반이상을 맞췄다면 서류로 갈라지는 것 같다. 흔히 개발자들의 대기업으로 여겨지는 네카라 급이 아니라면 레벨2까지만 다 풀 수 있어도 무난하다고 생각한다. 만일 네이버 부스트캠프나 우아한 테크캠프 등의 기업 부트캠프의 코테를 앞두고 있다면 레벨1의 문제만 다 풀 수 있어도 통과할 수 있다.

 

 - 참고로 공채가 아닌 상시채용은 난이도가 비교적 낮다. 하지만 그만큼 다 맞춰야할 것으로 기대된다. 필자의 경우 프로그래머스 100문제, 백준 골드 정도가 되었을 때 상시채용은 거의 다 풀었고, 네카라 공채는 반타작으로 일부 코테에 통과하였다.

 

* 자바스크립트?

 - 웹 프론트엔드를 준비하는 개발자라면 백준을 풀기 매우 힘들 수 있다. 입출력때문에 node.js로 풀어야하고 이 또한 쉽지 않기 때문이다. 게다가 시간복잡도 때문에 큐나 우선순위큐를 직접 구현해야하기도 한다.

 

 - 필자의 경우 템플릿을 만들어서 실제 프로그래머스와 비슷하게 문제를 풀 수 있도록 하였다. 입력과 출력구문은 거의 항상 변하지 않기 때문에 문제 자체에 집중할 수 있게 되었다. 만약 자바스크립트로 문제를 풀 것이라면 필자의 깃허브 레포지토리(baekjoon-for-js)를 참고하면 될 것 같다. 이 글에 모든 것을 기술하기에는 너무 장황하다. 해당 레포에 JS로 푸는 방법을 정리해두었으니 참고하길 바란다.

 

 - 큐나 우선순위큐는 검색해서 미리 공부하고 구현해두자. 일부 검색을 제한하는 코테를 제외하고는 대부분 검색이 가능하다. (필자 경험상 네이버를 제외하고는 모두 구글링에 제한이 없었다.) 미리 이 부분을 공부해두면 빠르게 구현할 수 있다.

 

 


참고

 

 

GitHub - haesoo-y/baekjoon-for-js: 👊 자바스크립트로 백준 알고리즘 문제를 풀어보자

👊 자바스크립트로 백준 알고리즘 문제를 풀어보자. Contribute to haesoo-y/baekjoon-for-js development by creating an account on GitHub.

github.com