Introduction

본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다.

첫 포스팅인 만큼 왜 알고리즘, 및 코테 준비인가? 에 대한 저의 생각을 정리하고 넘어가겠습니다.(무쟈게 깁니다. 스크롤 주의)

현실적으로 코딩테스트를 바라보는 현업에서의 태도는 최근들어 그다지 고운 시선은 아닌 것 같다고 생각합니다. 멘토님들과 이야기 해보면 취준이란 전제 하에 대략 절반정도는 긍정적, 절반 정도는 부정적으로 바라 보는 걸 알 수 있었습니다. 현실적으로 현업에서도 종래의 방법에 대한 반성, 자성에 가까운 형태로 42서울이 생겨났지요.

왜 그런 의견차가 생겨났는가? 이유는 간단합니다. 현실적으로 이러한 시험만으로 모든 취준 과정이나, 개발자 취업을 이룰 수는 없기 때문입니다. 우리나라의 입시 제도가 천편 일륜적으로 사람을 줄세우고, 그거에 몰두한 나머지 진짜 학습에 대한 전문가를 양성하고, 특정 분야에 대한 학술적 깊이 있는 이해도의 사람을 키우지 못하는 것처럼 코딩 테스트 역시 결국 '줄세우기' 수준이며, 청년들은 이것에 몰두하다 결국 '중요' 한 부분을 놓친다고 생각하는 (경험하는) 경우가 있기 때문입니다.

실력이 있는 개발자가 되어 여러 일들을 맡거나 지인의 추천으로 취업을 하는 경우도 있다는 점에서 코딩테스트 올인! 이건 사실 현실적이진 않아 보입니다. (결정적으로 코딩테스트가 코딩의 결정적인 실력향상에 도움을 주는 것도 아니기 때문에 ㅎㅎ;) 코테만 빡세게 하고, 정작 분별력이나 문제 해결력은 어디 쌈싸먹은 개발자가 되어 모르쇠 일관한다면 그건 '전문가' 라고 하기엔 정말 많이 부족하겠지요...

그럼에도 저는 간단하게 나마 약 한 달 정도 해당 내용을 공부하는 시간을 가지려고 합니다. 단 포인트를 잡는 방식을 저는 조금은 다르게 하겠다고 스스로 생각하고 있습니다. 제가 천천히 진행하는 데는 '알고리즘' 이라는 것에 대한 부분이 강합니다.

제가 여기에 1달의 시간을 들이겠다고 결심한 이유는, 알고리즘의 이해는 문제 해결능력을 당연히 키워줄 뿐만 아니라 자료형 사용 방식에 대한 이해, 즉 코딩의 아주 `기초가 되는 체력`을 키워준다는 점입니다. 어차피 비전공자, 현실적으로 전공자를 따라간다는 것은 쉽지 않습니다. 그들의 노력 몇 년분을 제가 몇 달 ~ 2년 정도의 시간으로 채운다? 욕심과 오만도 정도가 있는 법입니다.

그러나 제가 숱하게 경험한 것들 중 하나가 학습을 하여 결과를 만들어내고 문제 해결력을 키우는 가장 기본은 '기초체력 유무'에 있었습니다. 물론 현업에서 하는 거친 방식, 즉, 아주 기초만 습득하고 그걸로 처음 시작하는 상황에서 몇 년간을 `제대로` 구르는 방식도 있습니다. 그걸 추천하시는 분들도 많습니다. 4개월 ~ 6개월 후딱 준비하고 취업. 취업후 야근의 일상 + 학습의 일상.

사실 제가 생각해도 이러한 방식은 일정하게 타당합니다. 현업에서 그런 구름이 결국 최종적으로 여유를 만들어주고, 이러고 난 뒤 단단해진 사람은 어느 상황에서든 문제 해결로 갈 수 있는 단단함을 얻습니다. 하지만 기존의 기획자로써의 삶, 학습 컨설팅 상담가로써 일을 하다가 이직을 결정했던 가장 큰 핵심. 바로 자기 나름의 세움, 자기 브랜딩이 가능한 중고같은 신입을 원하는 현실에서 그러한 방식은 결국 저의 가능성, 사회에서 보여줄 역량적 위치가 `followee` 를 넘어설수 없다는 점이었습니다.

브랜딩을 진행하더라도 초기에 기초가 아예 없는 상태에선 결국 그걸 채운다고 현업에서 병행하는 결과를 낳고, 그런 결과는 다시 쳐짐, 개인의 경쟁력 부족을 초래합니다. 그래서 청년들이 취업을 하고 3년을 못채우고 나가거나, 다시 준비해서 더 높은 곳을 가려고 발버둥 치고, 회사에선 정작 이런게 없으면 해결할 수 없는 문제들에서 구르면서 해결할 수 있다고 이야기 하던 찰나 안됨을 느끼면 닥달하기 마련이지요. 결국 악순환이 어이지니 중소기업은 기피하고, 동시에 대기업이란 희망고문에 몰리는 현상으로 청년에게도 회사라는 조직에도 좋지 못하다는 사실을 너무 많이 봐왔습니다.

그렇기에 필요 최소한의 기초는 설령 느리게 가더라도 나중의 추진력을 위해 반드시 필수 불가결 하고, 그 작업을 42서울 초반 부에 해두는 것, 그것이 제가 지금 최대한 신경 써야 하는 부분이라 생각했습니다. 현실적으로 제 나이나, 다급하게 생각해야 하는 것은 맞습니다. 하지만 다급함에 몸을 맡겨, 진짜 제대로 하는놈이 되지 못하느니 제대로 된 놈이 되어서, 회사에서 몸뚱이 하나로 1억 버는 존재가 되는 것, 그것이 지금 이렇게 버티고 한 걸음씩 나가는 제 역량이자 가장 큰 장점으로 만들어야 하리라 생각하는 것입니다.

잡설이 길었습니다. 여튼 알고리즘 배웁니다! 😚

🧑🏻‍💻 알고리즘 박살내기 시리즈🧑🏻‍💻

00. INDEX

01. 코딩테스트란 무엇인가

02. 알고리즘 성능평가

03. 파이썬 기초(수 자료형)

04. 파이썬 기초(리스트 자료형)

05. 파이썬 기초(문자열, 튜플형)

06. 파이썬 기초(사전, 집합형)

07. 파이썬 기초(기본 입출력)

08. 파이썬 기초(조건문)

09. 파이썬 기초(반복문)

10. 파이썬 기초(함수와 람다 표현식)

11. 파이썬 기초(자주 사용되는 표준 라이브러리)

12. 그리디 알고리즘 개요

13. 그리디 알고리즘 유형 문제 풀이

14. 구현 유형 개요

15. 구현 유형 문제 풀이

16. DFS/BFS(스택과 큐 자료구조)

16-1. DFS/BFS(스택 자료구조)

16-2. DFS/BFS(큐 자료구조)

17. DFS/BFS(재귀함수)

18. DFS/BFS(Depth-First Search)

19. DFS/BFS(Breadth-First Search)

20. DFS/BFS(기초 문제 풀이)

21. 선택 정렬

22. 삽입 정렬

23. 퀵 정렬

24. 계수 정렬

25. 정렬 알고리즘 비교 및 기초 문제 풀이

26. 이진 탐색 알고리즘

27. 이진 탐색 알고리즘 기초 문제 풀이

28. 다이나믹 프로그래밍

29 - 1. 다이나믹 프로그래밍 기초 문제 풀이(1)

29 - 2. 다이나믹 프로그래밍 기초 문제 풀이(2)

30 - 1. 최단 경로 알고리즘(1)

30 - 2. 최단 경로 알고리즘(2)

31. 플로이드 워셜 알고리즘 개요

32. 플로이드 워셜 알고리즘 개요

33. 기타 그래프 이론 : 서로소 집합 자료구조

34. 기타 그래프 이론 : 서로소 집합을 활용한 사이클 판별

35. 기타 그래프 이론 : 크루스칼 알고리즘(최소 신장 트리)

36. 기타 그래프 이론 : 위상정렬

37. 기타 알고리즘 : 소수 판별 알고리즘

38. 기타 알고리즘 : 에라토스테네스의 체(다수 소수 판별)

39. 기타 알고리즘 : 투 포인터

40. 기타 알고리즘 : 구간 합 빠르게 계산하기

41. 개발형 코딩 테스트