누군가 "알고리즘이 뭔지 정확히 설명해줘." 라고 말한다면, 약간 멈칫할 것이다. 알고리즘이 어떤 컨셉인지는 느낌은 온다, 근데 설명은 못한다. 그리고 솔직히 왜 배워야 하는지도 잘 와닿지 않는다. 학교 강의 시간에도 데이터 구조랑 알고리즘은 지루하고 코드 따라 치기 바쁘다. (예전에 내가 그랬다).
일단 알고리즘은 우리 일상 생활에서도 쉽게 찾아볼 수 있다. 바로 생각나는게 "내비게이션" 인데, 여러 루트 중에서도 가장 빨리 목적지에 도착할 수 있는 루트를 소개해준다. 라면을 끓일 때도 수프, 면 등 넣고 몇 분 동안 끓이는 것 또한 마찬가지이다. 영화 "캡틴 아메리카 : 윈터 솔져" 에서 향후 하이드라에 위협이 될 만한 인물들을 분석하고 탐색해서 제거하는 "졸라 알고리즘" 같은 것도 생각이 난다.
이처럼 알고리즘은 목적을 달성하기 위해 컴퓨터에게 일을 시키는데 필요한 여러 개의 "지시 사항" 이라고 할 수 있다. 근데 이런 진부한 얘기는 집어치우고 일단 프로그래밍이 처음일 때는 특정 프로그래밍 언어를 붙잡고 늘어지기 바쁘다. 솔직히 알고리즘? 그런건 모르겠고~ 일단 내가 코드를 작성할 줄 알고 뭐가 굴러가야 하지. 근데 프로그래밍을 한가닥하기 시작할 즈음, 내 코드의 퀄리티에 대해 궁금해지기 시작한다. 만약 문법 오류같은 것도 없고 버그도 없는데 프로그램을 돌렸을 때 느리다면 참 난감하다. "어느 부분을 최적화해야 하는거야?" 이때 바로 알고리즘에 대한 지식이 필요한 것이다. 알고리즘을 공부하면 효율적으로 코드를 작성할 수 있고 깔끔해지기도 하고 관리하기도 편하다. 그리고 이런 알고리즘을 구현하는데 필요한 것이 "데이터 구조" 라는 것이다. "알고리즘"과 "데이터 구조"는 상호 보완 관계에 있다. 데이터 구조를 만드는데 알고리즘으로 순서화되어 있고 다시 이 데이터 구조를 가지고 보다 효율적인 알고리즘을 구현하는 것이다. 따라서 우리의 목표는 어떠한 작업에, 어떠한 데이터 구조를 언제, 어디서, 어떻게 사용해야 하는 것인지 스스로 알고 행동하는 것이다.