Haribo ML, AI, MATH, Algorithm

코딩 테스트 준비


코딩테스트를 위해 어려운 문제, 지난 코딩테스트 문제들만 골라 풀다보니 문득 특정 알고리즘들이 약하다는 것을 깨닫고 프로그래머스 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
  • 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%의 문제입니다.


이전 포스트 최적의 행렬 곱셈

다음 포스트 도둑질

Comments

Content