Programming/Algorithm2013. 5. 17. 09:22

 알고리즘이란 어떠한 문제를 해결하기 위한 여러 동작들의 유한한 모임이다.

 정의 : 입력(외부에서 제공되는 자료가 0개 이상 존재한다.), 출력(적어도 1개 이상의 결과를 내어야 한다.), 명확성(수행 과정은 명확하고 모호하지 않은 명령어로 구성될 수 있다.), 유한성(종결성)(유한 번의 명령어를 수행 후(유한 시간 내)에 종료한다.), 효율성(모든 과정은 명백하게 실행 가능(검증 가능)한 것이어야 한다)

 분석 기준 : 정확성, 작업량, 기억 장소 사용량, 최적성, 복잡도

(참고 : http://ko.wikipedia.org/wiki/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98)

 

 알고리즘은 문제를 해결하기 위한 방법이라고 볼 수 있다. "매일 아빠와 엄마에게 용돈을 받으면, 하루에 내가 받는 용돈은 얼마인가?" 와 같이 간단한 문제에 대한 해답을 찾는 방법부터 "임의의 수의 집합에 특정 수가 존재하는가?" 와 같은 문제에 대한 해답을 찾는 방법, 모두 알고리즘이라고 할 수 있다. 조금의 자원을 사용하여 정확한 답을 찾는 것이 알고리즘의 목표라고 볼 수 있다. 여기에서는 많이 알려진 알고리즘인 정렬, 탐색에서부터 온라인 저지(Online judge) 사이트들에 있는 문제들을 해결한 방법을 하나씩 정리해보려고 한다.

 

 알고리즘는 내가 블로그를 열게된 이유와도 같다. 알고리즘은 회사 업무에 염증을 느끼던 나에게 다시 한번 프로그래밍의 재미를 일깨워주고, 기초 부분을 하나하나 다시 보면서 몰랐던 내용을 이해하게 해주었다. 여유시간에 자료구조, 알고리즘 관련 책들을 보면서 for, while 등의 반복문을 한번이라도 덜 수행하게 하는 방법이 없는지 고민하면서, 한가지에 몰두하며 시간을 보낼 수 있었다. 이런 재미를 나만이 아닌 다른 누군가도 느끼길 바랬고, 또 내가 알게된 내용을 정리하고자 블로그를 열게 되었다.

Posted by 개발자테오