프로그래밍/백준

코딩테스트 - 알고리즘 공부 순서

매 석 2023. 3. 31. 18:34
반응형

- 시작에 앞서

코딩 테스트 준비는 단기간에 완성되지는 않는다.

꾸준한 학습과 노력이 있어야 좋은 결과를 얻을 수 있다.

1. 자주 쓰는 알고리즘 개념은 항상 알아볼 수 있게 정리해놓아야 한다.

- 워낙 많은 알고리즘 개념이 존재하기에 이전에 학습했던 내용도 이후에 잊을 수도 있다.

2. 각각의 회사나 집단에서 원하는 형식으로 준비해야 한다.

- 코딩 테스트는 보통 대기업에서 많이 시행하곤 한다.

각각 개발자인지 데이터 분석가인지 등의 상황에 따라 문제가 다를 수 있으니

사전 조사를 통해 해당 집단에서 원하는 형식의 난이도와 유형으로 준비해야 한다.

3. 가장 좋은 방법은 꾸준히 하루에 1문제씩 푸는 것이다.

- 취업 직전이라 바로 코딩 테스트를 단기간에 준비할 수는 있지만,

많은 경험을 하지않고 단순히 문제 유형 자체를 외우게되면,

해당 개념의 응용을 요하는 문제를 풀지 못할 수 있다.

그렇기에 하루에 1개씩 꾸준히 여러 개념들을 학습해보며 경험을 쌓고

이를 바탕으로 코딩 테스트를 준비하는 것이 좋다고 생각한다.

+현재 본인의 백준 상황

데이터 분석 관련을 준비하기에 언어는 python으로 준비하고 있다.

백엔드, 프론트엔드 등 다양한 개발 환경에서 사용하는 언어가 다르기에

준비하고 있는 분야의 언어로 코딩 테스트를 준비하는 것이 좋다.

추가로 백준을 기준으로 문제 난이도를 "골드 상위 ~플래티넘" 정도 풀 수 있다면

대기업 코딩테스트도 충분히 가능하다고 생각한다.

(참고로 코딩테스트는 "프로그래머스" 환경에서 자주 이루어진다.)

본인의 경우는 약 반 년정도 백준에서 거의 꾸준히 1문제씩 풀은 결과

현재 잘 아는 유형은 골드3~4정도 풀이가 가능하고, 나머지는 실버 상위~중위 정도

풀이가 가능하다. 모르는 개념이 아직도 많기에 갈 길이 멀다.

 

 

- 알고리즘 분류

이외에도 많은 분류가 있지만, 백준의 문제수를 기준으로

내림차순하여 자른 것이다.

 

- 알고리즘 공부 순서

여러 공부 방법이 있지만 나는 기초부터 친해지는 방법을 선택하였다.

(알고리즘에 대한 대학교 강좌나 사전 지식이 있는 경우는 제외한다.)

1. 수학, 구현 -> 이후 정수론, 기하학

a+b를 출력하거나, 별 모양을 찍는 등의 가장 기초적인 문제가 포함되어있다.

물론 그 안에서 다양한 난이도가 있지만 초보자가 처음 풀 수 있는 문제들이

여기에 속해있다.

2. 자료구조, 문자열, 정렬

그 다음으로 풀어볼 만한 난이도의 문제가 포함되어있다.

코딩테스트에서 자료구조를 활용한 문제도 많이 나오기에

이후에 어려운 난이도의 자료구조 문제도 풀 수 있어야 한다.

3. 브루트포스 알고리즘, 그리디 알고리즘, 다이나믹 프로그래밍

여기서부터는 개념의 방향성을 알고 있어야 문제를 풀기 수월하다.

각각 문제를 보고 알맞게 풀이하는 능력을 갖추어야하기에

난이도가 조금 있는 편이다.

4. 그래프 이론, 그래프 탐색 -> 이후 트리, DFS, BFS, 백트래킹, 분할 정복 등

특히 삼성 코딩테스트에서 DFS, BFS 개념이 자주 나왔다고 한다.

이 개념들은 꼭 숙지하고 있어야 문제를 풀이할 수 있다.

개념없이 그냥 문제를 보고 풀이하기에는 꽤나 난이도가 있다.

 

5. 이후 더 높은 난이도를 접하여 얻는 개념들

문제를 풀다보면 새로운 알고리즘 개념을 많이 접하게 된다.

그렇게 차근차근 하나씩 배우다보면 생각보다 많은 분류를 배울 수 있다.

참고로 앞에 1~4번 내용이 코딩테스트에 자주 나오는 내용이나,

안정적인 고득점을 목표로 하려면 5번의 과정이 필요하다.

이렇게 학습하는 방법은 충분한 여유가 있을 때 가능하다.

만약 시간이 부족하다면, 구글링을 하거나 백준에 있는 문제집의 형태로

되어있는 코딩테스트 연습 문제를 풀어보는 것이 중요하다.

 

- 문제의 난이도

문제의 난이도가 어렵다는 것은

쉽게 말해, "DFS"+"브루트포스 이론"+"에라토스테네스의 체" 등

한 문제를 풀기 위해 사용해야할 개념들이 많다는 것이다.

그래서 문제를 풀기 위한 개념이 준비되어 있지 않다면,

어려운 난이도는 건드려보지도 못한다.