코딩테스트를 위해 어려운 문제, 지난 코딩테스트 문제들만 골라 풀다보니 문득 특정 알고리즘들이 약하다는 것을 깨닫고 프로그래머스 Level1 문제부터 차근차근 풀어보고 느낀점이 무조건 Level1 부터 풀고 공부해야 합니다. 각 Level에 따라 필수적으로 익숙해져야하는 부분들이 몇가지 있었습니다.
Level 1
Level 1 문제는 정말 쉽습니다. 하루에 30문제정도씩 풀 수 있을 만큼 쉬운 난이도지만 문제를 풀고 다른사람의 풀이를 보면 배울점이 차고 넘칩니다. 나는 5~6줄 걸려 푼문제를 2줄 컷해버리는 사람들이 대부분입니다. Level 1 에서 꼭 익숙해 져야하는 라이브러리 및 잡기술들은
functools.reduce
itertools.product
lambda
- 내포리스트
- 한줄
if
- Ex)
answer = 3 if 조건 else 0
- Ex)
map
*
zip
collections.Counter
뭐 대충 이정도가 있을것 같습니다. 이정도에만 익숙해져도 10줄 걸릴 코드 3~4 줄로 줄여버릴 수 있으니 수정하기도 편리해지고 라이브러리를 이용하니 효율성도 증가됩니다.
Level 2
보통 코딩테스트 1, 2 번 문제로 나오는 문제의 난이도 수준입니다. Level 1이 라이브러리만을 이용해 풀 수 있었다면 Level 2 부터는 특정 알고리즘의 풀이방식을 및 접근법 알아야합니다.
Stack/Queue
Greedy
- 정규식
특히 Stack/Queue
풀이법은 모르면 절대로 풀 수가 없습니다. 한번 익숙해지면 간단하지만 Stack/Queue
의 특성을 어떤식으로 이용해서 문제를 푸는지 꼭 익숙해져야 합니다.
Level 3
코딩 테스트 중간보스급 수준의 문제입니다. Level 2는 문제를 보면 ‘아, 이런식으로 하면 되겠구만’ 하는 느낌이드는데 Level 3부터는 대부분의 문제들이 ’?’ 하게 만듭니다. 특히 DP
, Dynamic Programming을 해결하는 느낌은 확실하게 이해하고 넘어가야합니다. 제 기준으로 모든 알고리즘 통틀어 DP
종류의 문제가 가장 어렵습니다. 왜냐하면 DP
는 직관적이지 않고 간접적인 객체들로 구성되어있어 풀이를 봐도 이해하기가 매우 어렵습니다. 이거는 직접 맞아보시면 무슨말인지 이해가 갈겁니다. 거스름돈 문제가 DP
를 이해하기에 가장 기초적이면서 좋은 문제입니다.
DP
DFS/BFS
,Graph
Recursion
- 효율성
BinarySearch
Heap
,Priority Queue
난이도는 DP
, BinarySearch
문제가 가장 어렵고 나머지는 적당한 수준입니다.
Level 4
코딩테스트 가장 어려운 난이도 수준의 문제입니다. 딱히 새로운 알고리즘을 통한 접근법은 필요가 없지만 Level 2, Level 3 문제에 아주 까다로운 조건이 몇개 들러붙어 코딩하기 어렵고 접근하기 어렵게만든 수준입니다.
Level 5
구글링을해도 풀이가 나오지않는 문제가 대부분이고, 접근조차 어떻게 해야할지 감이 안잡히는 수준의 문제입니다. 거의 9만명 중 문제푼 사람이 적게는 4~100명 밖에 없는 정답률 0.00004% ~ 0.001%의 문제입니다.