본문 바로가기
Algorithm

알고리즘으로 들어가기 전...

by Notorious Coder 2023. 7. 11.

누군가 "알고리즘이 뭔지 정확히 설명해줘." 라고 말한다면, 약간 멈칫할 것이다. 알고리즘이 어떤 컨셉인지는 느낌은 온다, 근데 설명은 못한다. 그리고 솔직히 왜 배워야 하는지도 잘 와닿지 않는다. 학교 강의 시간에도 데이터 구조랑 알고리즘은 지루하고 코드 따라 치기 바쁘다. (예전에 내가 그랬다). 

 

 

일단 알고리즘은 우리 일상 생활에서도 쉽게 찾아볼 수 있다. 바로 생각나는게 "내비게이션" 인데, 여러 루트 중에서도 가장 빨리 목적지에 도착할 수 있는 루트를 소개해준다. 라면을 끓일 때도 수프, 면 등 넣고 몇 분 동안 끓이는 것 또한 마찬가지이다. 영화 "캡틴 아메리카 : 윈터 솔져" 에서 향후 하이드라에 위협이 될 만한 인물들을 분석하고 탐색해서 제거하는 "졸라 알고리즘" 같은 것도 생각이 난다.

 

 

이처럼 알고리즘은 목적을 달성하기 위해 컴퓨터에게 일을 시키는데 필요한 여러 개의 "지시 사항" 이라고 할 수 있다. 근데 이런 진부한 얘기는 집어치우고 일단 프로그래밍이 처음일 때는 특정 프로그래밍 언어를 붙잡고 늘어지기 바쁘다. 솔직히 알고리즘? 그런건 모르겠고~ 일단 내가 코드를 작성할 줄 알고 뭐가 굴러가야 하지. 근데 프로그래밍을 한가닥하기 시작할 즈음, 내 코드의 퀄리티에 대해 궁금해지기 시작한다. 만약 문법 오류같은 것도 없고 버그도 없는데 프로그램을 돌렸을 때 느리다면 참 난감하다. "어느 부분을 최적화해야 하는거야?"  이때 바로 알고리즘에 대한 지식이 필요한 것이다. 알고리즘을 공부하면 효율적으로 코드를 작성할 수 있고 깔끔해지기도 하고 관리하기도 편하다. 그리고 이런 알고리즘을 구현하는데 필요한 것이 "데이터 구조" 라는 것이다. "알고리즘"과 "데이터 구조"는 상호 보완 관계에 있다. 데이터 구조를 만드는데 알고리즘으로 순서화되어 있고 다시 이 데이터 구조를 가지고 보다 효율적인 알고리즘을 구현하는 것이다. 따라서 우리의 목표는 어떠한 작업에, 어떠한 데이터 구조를 언제, 어디서, 어떻게 사용해야 하는 것인지 스스로 알고 행동하는 것이다.