C언어 알고리즘 공부 시작
C언어 알고리즘 공부 시작
■ 저는 취미로 심심할 때 프로그램 언어를 공부하는데요. C, java, android 등 프로그램을 만들 실력은 아직 안되고요.^^ 소스 코드 정도만 읽을 줄 아는 실력인데 좀 더 열심히 공부해서 프로그램을 만들어보려고 하니 알고리즘 공부가 좀 필요할 거 같아서 시간 되는대로 공부하면서 정리해보려고 이 카테고리를 만들었습니다. 초보가 공부하면서 정리할 카테고리이기 때문에 가볍게 봐주셨으면 좋겠습니다.^^
■ 알고리즘이란 어떤 문제가 주어졌을 때 그 문제를 해결하기 위한 정해진 동작들이라고 생각하면 되는데요. 주어진 문제를 잘 이해하고 있어야 해결하는 동작도 잘 만들 수 있습니다. 이때 문제 자체만 잘 이해한다고 되는 건 아니고요. 주어진 상황 파악도 중요합니다. 포함된 자원은 있는지 제한된 요소가 포함되어 있는지 확인하는 게 중요하다는 의미입니다.
■ 알고리즘은 문제를 효율적으로 해결하는 동작인데, 즉 " XX를 어떻게 해라" 정도의 동작에 해당합니다. 이때 XX는 자료가 될 것이고, 이런 자료의 집합은 독특한 구조를 갖고 있는데 대표적으로 배열과 스택인데요. 이것들을 가리켜 자료구조라고 합니다.
이런 자료구조와 알고리즘의 관계는...
자료 구조가 잘 만들어져 있으면 알고리즘은 간단하게 만들 수 있고, 반대로 자료구조가 허술하다면 알고리즘을 더욱 신경 써야 하는 관계입니다. 즉, 서로를 보완해주는 관계인데요. [자료구조+ 알고리즘=10] 이라고 했을 때 3+7=10이 될지 6+4=10이 될지는 상대의 상황에 따라서 달라지게 되는 것입니다.
■ 보통 어떤 문제의 해결 방법은 여러 개가 존재하기 마련인데요. 어떤 녀석을 선택해야 할까요? 예를 들어 시간 소요는 적은 반면 메모리 사용량이 많은 경우와 반대로 시간은 좀 더 소요되지만 메모리 사용량이 적은 경우 등 여러 가지 알고리즘이 있습니다. 그렇기 때문에 알고리즘을 잘 이해하고 상황에 맞는 선택을 해야 합니다. 일반적으로 빠르게 처리하는 것보단 단순함에 비중을 두는 경우가 많습니다. 속도는 조금 저하되더라도 단순화 시켜서 일단 프로그램을 실행시켜야 좀 더 효율적인 방법 등을 찾아볼 수가 있기 때문입니다. 굴러가지도 않는 자동차를 더 빠르게 가게 할 순 없겠죠?^^ 일단 움직여야 연비를 줄이면서 좀 더 빠르게 갈 수 있는 방법을 연구할 수 있을 겁니다.
이렇게 해서 알고리즘의 개념에 대해서 공부하면서 정리해봤는데요. 앞으로 C언어로 프로그램을 작성하면서 하나씩 정리해보겠습니다. 수고하셨어요.