알고리즘/Algorithm

0 - 0. 알고리즘 공부 왜 하는걸까?


알고리즘.. 


사실 나는 알고리즘이라는 분야를 조금 늦게 접한 편이다. 24살.. 5학년 때 ㅠㅠ

개인적으로는 미리 준비하지 못한 것에 대한 미련이 없기 때문에 지금은 취미로 알고리즘 공부를 하고 있다.

 

마냥 알찬 삶을 살아온 것이 아니라서 실력으로 보면 마냥 허접하다.

직장 생활을 하면서도 알고리즘 공부를 놓지 못하는 이유는 그만한 매력을 느끼고 있기 때문이 아닐까 생각한다. ㅎㅎ

 

알고리즘에 대해 이것저것 찾아보신 분들이라면 세상에는 수많은 괴물들이 존재하고 있다는 사실을 알고 있을 것이다.

하지만 기죽을 필요는 전혀 없다.

이 글을 보고있는 당신이 "지금 알고리즘 공부를 하기에 늦지 않았을까?"라고 고민한다면 그런 생각할 시간에 문제 하나를 더 푸는 것을 추천한다.

 

실은 나보다 훨씬 더 유능하고 똑똑한 사람들이 알고리즘 공부를 어떻게 하면 좋은지 길라잡이를 만들어 놓으신 분들이 많다.

정답이 있는건 아니지만 알고리즘에 대해 자세하게 알고 싶다면 다른 여러 사람들이 올려놓은 길라잡이들을 참고해보는 것이 좋을 듯하다.

 

그렇다면 나는 왜 이런 글을 쓰는 것인가?

사실 알고리즘.. 어렵다! 정말 어렵다!

그래서 보다 쉽고 재미있게 알고리즘을 접할 수 있도록 노력하려 한다.

목적이 뭐가 됐든간에 내 글들을 읽고 많은 도움받아갔으면 좋겠다.

 

 

알고리즘이 언제부터 이렇게 중요해지고 유명해졌는지 모르겠다. 코딩 테스트? 정보 올림피아드?

아마 정올(정보 올림피아드)보다는 코테(코딩 테스트)의 영향이 더 크지 않았나 싶다.

 

이 글에서는 알고리즘을 공부하기 전에 이걸 대체 왜 공부하는 건지 어디에 써먹는 건지 이런 얘기를 해보자.

 


알고리즘 공부, 왜 하는걸까?


알고리즘 알고리즘 하는데 그럼 대체 알고리즘은 왜 공부하는 거고 여러 기업에서는 왜 코딩 테스트를 보는 것인가?

알고리즘 공부를 하는 궁극적인 목적은 "문제 해결 능력을 기르기 위해"라고 할 수 있다.

"문제 해결 능력", 말 그대로 어떠한 문제가 주어졌을 때 그 문제를 해결하는 능력을 말한다.

 

사실 이 "문제 해결 능력"이라는 게 말이 쉽지 직접 하는 건 어렵다.

주어진 문제를 해결하기 위해 어떠한 알고리즘을 사용하는 것이 효율적인지 파악해야 하며 알고리즘을 구축하기 위해서는 기본적인 프로그래밍 언어 개념이 잡혀있어야 한다.

 

비전공자들이 흔히 하는 실수가 프로그래밍 언어를 공부하는 것과 알고리즘을 공부하는 것을 같은 맥락으로 본다는 것이다.

그래서 프로그래밍 언어에 대한 배경 지식이 갖춰져있지 않은 상태로 알고리즘에 뛰어들었다가 힘들어하는 경우를 많이 봤다.

혹시나 알고리즘 공부를 접해보고 싶은데 나는 아직 C언어나 Python과 같은 프로그래밍 언어를 잘 모른다고 한다면 프로그래밍 언어를 먼저 익히는 것을 권한다.

 


코딩 테스트, 프로그래밍 대회 어떻게 준비하면 될까?


코딩 테스트에도 종류가 많고 대회마다 유형이 다양하다.

자격증 공부하는 것과 비슷하게 준비하고자 하는 코딩 테스트의 유형을 파악하고 이에 관련된 기출문제 풀어보는 것이 좋다.

삼성 SW 역량 테스트 A형의 경우에는 DFS와 BFS 같은 그래프 알고리즘을 기반으로 한 시뮬레이션 문제가 주로 출제되며 카카오의 경우는 문자열, DP, 그리디 관련 배경 지식을 요구하는 경우도 있다.

 

대회도 마찬가지다.

솔직히 말하면 각 기업들의 코테보다 초, 중, 고등학생들을 위한 정보 올림피아드나 대학생들을 위한 ICPC 같은 대회들의 난이도가 훨씬 어렵다.

따라서 코테가 아닌 대회를 준비하고 싶다면 코테에서 출제되는 유형뿐만이 아니라 중급, 고급 알고리즘도 함께 준비하는 것을 권한다.

 

조금 더 효율적이고 도움되는 공부를 하고 싶다면 시간을 정해놓고 풀어보는 것이다.

코테나 대회나 정해진 시간 안에 풀지 못하면 풀 수 있다 하더라도 소용없다.

삼성 SW 역테 A형은 3시간에 두 문제, B형은 4시간에 한 문제를 풀어야 한다.

시간이 충분해 보이지만 실제로 해보면 굉장히 힘들다.

알고리즘 스터디나 모임을 통해 팀원들과 함께 고민해보는 것도 좋다!

 


어떤 언어를 사용하는 것이 좋을까?


PS 할 때 많이 사용하는 언어들로는 C/C++, Java, Python이 있다.

이중에서도 C++을 가장 많이 사용하며 요즘에는 Python도 코테 언어로 많이 채택하는 추세다.

 

Python을 허용하지 않는 코테나 대회들도 많으니 잘 생각해서 선택하길 바란다.

 

물론 코테 합격 후 취업을 하게 된다면 기업에서 어떤 언어를 사용하게 될지는 나도 모른다.

 



이 글도 그렇고 앞으로 써나갈 알고리즘 글들이 만족스럽지 못할 수도 있다.

나도 아직 잘 모르는 부분이 많으며 더 잘 쓰여 있는 블로그들도 많기 때문에 다른 분들이 써놓은 글들도 많이 참고해가면서 공부하길 바란다.

부족한 부분이 있다면 계속해서 채워나갈 예정이며 궁금한 점이 있다면 언제든지 컨택해도 좋다.

 

모든 IT 계열 지망생들, 파이팅이고 절대 포기하지 않았으면 좋겠다.