코딩테스트를 처음 준비한다면 언어 기초 → 배열·문자열과 자료구조 → 완전탐색 → BFS·DFS → 이분탐색·그리디 → 동적계획법 순서로 공부해 보자. 아래는 직접 문제를 풀며 정리한 학습 방법과 단계별 연습 경로다. 기업별 출제 빈도를 집계한 순위는 아니며, 지원하는 시험의 안내와 자신의 약점에 맞춰 순서를 조절하면 된다.
처음 시작할 때의 공부 순서
- 언어와 복잡도: 입출력, 반복문, 함수, 정렬을 익히고 입력 크기로 가능한 시간복잡도를 판단한다.
- 배열·문자열·자료구조: 인덱스와 경계값, 스택·큐·해시를 연습한다. 백준 1475 방 번호로 개수 세기를, 2346 풍선 터뜨리기로 덱 활용을 연습할 수 있다.
- 완전탐색과 그래프: 모든 경우를 빠짐없이 만드는 방법부터 익히고 방문 배열을 사용하는 BFS·DFS로 넘어간다. 14716 현수막 다음 1707 이분 그래프를 풀어보자.
- 탐색 범위 줄이기: 이분탐색, 투포인터, 누적합을 익힌다. 1940 주몽은 정렬과 투포인터를 연결하는 연습이다.
- 그리디와 DP: 그리디는 매 선택의 정당성을 설명하고, DP는 상태·전이·기저값을 먼저 적는다. 1535 안녕으로 배낭 형태의 DP를 연습할 수 있다.
- 심화: 기본 유형이 익숙해지면 최단경로와 트리, 세그먼트 트리의 점 갱신·구간 조회로 확장한다.
한 문제를 끝냈는지 확인하는 체크리스트
- 풀이를 보지 않고 핵심 아이디어를 말할 수 있는가?
- 시간복잡도와 메모리 사용량을 설명할 수 있는가?
- 최솟값·최댓값, 중복, 원소 하나 같은 경계 입력을 확인했는가?
- 틀린 이유를 한 줄로 적고, 며칠 뒤 다시 풀어봤는가?
아래는 처음 작성한 학습 회고다. 별표와 빈도 구분은 당시 개인적인 체감이며 모든 기업에 통용되는 출제 통계는 아니다.
1. 개요
신입 개발자로 취업하기 위해서는 코딩테스트는 거의 필수인 듯하다.
처음 시작할 때 백준 티어 기준 브론즈 5에서 현재 골드 1까지 올라오고 나서 회고 겸 처음 시작할 때 뭐부터 어떻게 해야 할지 정말 모르겠는 알고리즘 공부에 대해서 정리해 볼 것이다.
이 글은 지극히 주관적인 기준이며 알고리즘 및 코테 공부를 하는데 하나의 작은 기준?으로만 생각하고 각자 자신에게 맞는 공부법을 찾길 바란다.
2. 알고리즘 공부 방법
1. 약 30분 ~ 1시간 정도 시간을 정해놓고 그 시간을 넘겨도 못 풀면 구글링으로 다른 사람이 푼 코드를 보고 공부한다.
2. 풀이를 보고 복붙 하지 말고 이해하고 찾아보며 직접 따라 쳐본다. 백문이 불여일타 > 그냥 복붙 하면 살 뺀다고 하고 운동 유튜브 보고 운동했다고 하는 거랑 같다.
3. 처음 본 알고리즘이면 구글링으로 알고리즘에 대한 개념을 찾아본 후 공부하고 다시 풀어본다. 이후 공부한 알고리즘을 활용해야 풀 수 있는 문제를 백준에서 찾아서 3문제 이상 풀어본다.
4. 정 모르는 풀이면 2 ~ 3번 정도 읽고 넘긴 후 1주일 뒤 다시 풀어본다.
5. 문제를 풀었으면 다른 사람의 코드를 참고하고 좋은 풀이가 있으면 또한 공부한다.
3. 코딩테스트에 많이 나오는 알고리즘
본인은 대기업 코딩 테스트 합격을 목표로 두고 공부하고 있기 때문에 내 기준에 맞춰 설명할 것이다.
아래는 주로 경험상? 많이 나오는 알고리즘을 써놨으며 이외에도 엄청 많은 알고리즘이 있기 때문에 직접 찾아보고 필요성에 따라 공부하는 게 좋다.
★ : 중요도
많이 나오는 거
구현 ★★★★
- 그냥 실수 안 하면 됨. 근데 그게 힘듦. 양치기로 경험 쌓는 방법 밖에 없음
그래프 ★★★★
- BFS, DFS
- 백트래킹
- 다익스트라
목적지와 출발지를 거꾸로 보는 발상도 필요할 수도? 항상 시간 복잡도를 생각할 것. 프로그래머스 같은 곳에는 다익의 효율성도 따짐. O(ElogV)
- 트리 전위, 중위, 후위 순회. 보고 가는 것도 괜찮을 듯.
완전탐색 ★★★★★
조합, 순열문제 자주 풀어보면 감이 옴. DFS 랑 짝꿍
ex) boj 테트로미노
탐욕법/Greedy ★★★★
시간복잡도만으로 그리디 여부를 결정하지 말고, 선택 기준을 정한 뒤 반례와 교환 논증 등을 통해 타당성을 확인한다.
그리디는 현재의 선택이 전체 최적해를 해치지 않는다는 근거가 필요하다. DP로 바꿀 수 있는지는 상태와 전이를 구성하고 제한 안에 계산할 수 있는지 따로 확인해야 한다.
접근법
우선순위 큐, 스택등의 자료구조를 사용하는 방안으로 접근. 거꾸로 접근하면 풀리는 문제들이 있음.
일단 손으로 풀어보고 알고리즘이 완전하게 짜이면 그때 구현.
이거 안 하면 그리디에서 5시간 버림.
해시 응용★★★★★
이건 뭐 할 말이 없음
문자열 ★★★★★
c++로 풀면 불리하기는 함. 문자열 문제 나오면 파이썬으로 하는 게 정신건강에 좋음.
적당히 나오는 거
이분탐색 ★★★
중간 때리고 오른쪽으로 갈지 왼쪽으로 갈지 자기만의 방식을 정해야 됨. 그때그때 달라지면 디버깅하는데 5시간 씀.
동적계획법 ★★★
부분 문제가 어떻게 쪼개지는지.
기저 조건이 어떻게 성립하는지.
경우의 수는 다 더하기, 최댓값, 최솟값은 ret 변수에 max 또는 min.
dp 테이블 초기화 잘할 것. 무지성 -1 하다가 큰코다침.
dp 테이블 반환값. 수 범위 잘 체크. long long 써야 될 수도. 물론 dfs 할 때 함수 리턴 값도 long long.
비트 마스킹★★
익숙해지면 나쁘지 않음. 근데 잘 안 나와서 카카오 들어가고 싶으면 공부해놓는 게 좋음
연계 유형으로 비트 필드를 이용한 동적계획법 나옴.
dp 테이블을 비트로 만든 거임.
슬라이딩 윈도우 & 투포인터 ★★
O(N^2)으로 할 때 터지면 이거로 해보는 것도 괜찮을 듯. 시간복잡도는 O(N)
누적합 ★★
배열 범위 안에 있는 모든 수의 합을 O(1) 만에 구할 수 있음. 합을 계속해서 구하는 경우 쓰면 괜찮을 듯. 단 배열 내부의 값이 변동되면 안 됨.
변동될 때는 세그트리로 합을 O(logN) 만에 구할 수 있음.
거의 안 나오는 거
에라토스테네스의 체
소수 문제 풀 때 사용. 거의 안 나오지만 알면 시간복잡도 녹이는데 좋음
4. 기타
알고리즘 풀이용 언어 정하기
자신이 코딩 테스트를 볼 때 사용할 언어를 정하는 것 또한 중요한 것 같다.
나는 처음에 C++로 코딩을 배워서 가장 익숙했기 때문에 C++로 알고리즘을 풀이하고 있다.
다른 후기를 보면 자바 스프링을 사용하는 기업에서는 코딩 테스트 언어를 Java로 제한하는 경우도 있다고 하고(우아한 형제들, 우테코) C++로 풀이를 한다고 해도 나중에 면접에서 해당 기업이 주로 사용하는 언어로 재 풀이를 요청하는 경우도 있다고 한다.
가장 추천하는 언어 : C++, Java, Python
3개 언어 중 하나를 정해서 공부하면 좋을 것 같다.
알고리즘 공부 사이트
백준 : https://www.acmicpc.net/
프로그래머스 : https://programmers.co.kr/
코드업 : https://codeup.kr/index.php
리트코드 : https://leetcode.com/
코드포스 : https://codeforces.com/
알고스팟 : https://algospot.com/judge/problem/list/
책 추천
종만북 - 알고리즘 문제 해결 전략 : https://book.algospot.com/
알고리즘 문제 해결 전략
프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략, 구종만 지음, 인사이트, ISBN 978-89-6626-054-6 새 소식 책 소개 <알고리즘 문제 해결 전략>은 새로운 알고리즘 책입니다. 종이에 적힌 의사코드
book.algospot.com
- 책 내용 자체가 어렵고 가격도 비싸지만 가격 값 하는 책.
- 알고리즘을 처음 공부 시작한 사람이 봤을 땐 이게 뭔소린가 하지만 어느정도 공부한 후에는 기본적인 템플릿을 정할 수 있고 문제 푸는 방향을 설정하는데 도움을 주는 책.
- C++언어로 설명되어 있음