주변에서 코딩테스트를 위해 자료구조와 알고리즘에 대해 공부해야 한다는 이야기를 많이 들었고 정처기 시험 이후 당연하게 관련된 공부를 하고 있다. 그렇다면 자료구조와 알고리즘은 왜 중요한 것일까? 막상 누군가가 나에게 물어보면 자신있게 대답할 수 있을까 하는 의문이 들어 이에 대해 간단히 정리해보고자 한다.
자료구조는 말그대로 어떠한 자료를 담기 위한 구조이다. 가장 익숙한 예시로는 array(배열)을 들 수 있고 이 밖에도 Stack, Queue,linked list 등이 있다. 이러한 자료구조가 중요한 이유는 우리가 프로그램을 만들었을 때 어떤 데이터 구조를 선택하는 지에 따라 그 성능이 결정되기 때문이다.

알고리즘은 어떠한 결과를 기대하고 수행하는 절차이다. 우리의 일상도 알고리즘으로 이루어져 있다. 아침에 일어나서 머리를 감고 밥을 먹고 현관문을 나서는 이 모든 과정 또한 출근을 하기 위한 알고리즘이라고 할 수 있다. 프로그래밍을 할 때도 마찬가지다. 다양한 알고리즘에 대해 안다는 것은 그만큼 문제를 해결하기 위한 방법을 많이 알고 있다는 뜻이기 때문에 프로그래밍을 하기가 더욱 수월할 것이다.
시간 복잡도는 분/초에 대한 것이 아닌 단계(step)에 대한 것이다. 어떠한 프로그램을 수행할 때 시간 복잡도는 중요하다. 코딩 테스트 문제에 0.5초, 1초 등 시간 제한이 제시되어 있는데 이 시간 안에 프로그램이 돌아가야 한다는 뜻이다. 제한 시간이 1초라면 1억 번의 연산 안에 원하는 답을 구해야 한다. 연산이 얼마나 "빠른가"를 측정할 때는 얼마나 많은 단계가 필요한 지를 논해야 한다. 단계 수를 측정하는 것이 연산의 속도를 분석하는 핵심 비결이다.
사진출처
https://m.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS8073601837