본 포스트는 c언어를 중심으로 작성되었습니다.
알고리즘은 삶아 먹는건가요?
아뇨 , 삶아 먹으시면 큰일 납니다. ㅋㅋ 그렇다면 알고리즘은 어떻게 해야할까요?
알고리즘 정말 어렵습니다. 알고리즘의 사전적 정의를 찾아보면 수학과 컴퓨터 분야에서 정해진 일련의 방법 등을 공식화한 절차적 형태라 정의합니다. 또한 9세기 경 페르시아 수학자의 이름에서 따왔다고 전해집니다.
이렇게만 들으면 이해가 정말 안됩니다. 그렇다면 또 예시를 들어야죠
우리 라면을 끓여봅시다!
라면 겉만 봐도 참 맛있겠네요.. 밥을 안먹고 포스팅 하는 터라 배가 고픕니다 ㅠㅠ...
각설하고 예시에 대한 진행 이어가겠습니다!
1. 라면 끓이기 위해서 냄비와 수저 냄비 받침을 준비합니다.
2. 끓이려면 물이 필요하니 냄비에 물을 받아, 불을 켜고 끓일 준비를 합니다.
3. 라면 육수에서 깊은 맛을 내기위한 건더기를 먼저 넣어줍니다 .
4. 물이 끓기 얼마전 건면을 넣고, 스프를 뿌려줍니다 .
5. 라면의 면이 탱글탱글해지고 전반적으로 스프가 잘퍼져 맛있을때 먹을 마음가짐을 가집니다.
어떤가요? 각자가 라면을 끓이는 방법은 다르지만, 비슷하죠?
위 절차에서 라면의 건면과 건더기 스프는 컴퓨터에서 자료형이 됩니다. 그렇다면 라면의 재료를 언제 넣을지 결정하는 것은 자료형에 대한 연산이 됩니다. 마지막으로 위와 같은 일련의 과정 전체를 우리는 '알고리즘' 이라고 부릅니다.
즉 어떤 행위에 대한 절차라고 생각하면 생각하기 쉽습니다.
하지만 효과적인 알고리즘을 수행시키기 위해선 다음 조건을 만족시켜야 합니다.
1. 입력 : 알고리즘을 수행하는데 필요한 자료를 외부에서 입력
2. 출력 : 수행 후 결과를 최소 하나 이상 출력
3. 명확성 : 알고리즘의 명령어는 명확하게 보여주어야 함
4. 유한성 : 수행 후 반드시 종료
5. 효과성 : 기본적임과 동시에 반드시 실행할 수 있어야함
딱딱한 표현을 싫어하지만, 위와 같은 조건을 만족시켜야 만 좋은 알고리즘을 만들어낼 수 있습니다.
그렇다면 컴퓨터 코드 상에서 알고리즘을 보겠습니다.
본 코드는 vs code에서 작성되었습니다. c언어의 header파일과 main진입점에 대한 설명을 한 포스트가 올라올때 다시 링크를 추가하여 설명하도록 하고 알고리즘 자체로만 설명을 해보겠습니다!
본 코드는 character (문자열 자료형)의 포인터 변수로 선언된 s1 안에 담긴 문자열에서 동일한 문자가 몇개 나왔는지 검출해내는 아주 간단한 알고리즘 입니다.
코드에 대해 아실려 할 필요는 없습니다 제가 재미있게 알고리즘 절차를 적어보겠습니다.
1. s1은 도둑입니다. 상점에서 물건을 훔쳤지만, 동일한 물건(4종)을 여러개 훔쳤습니다. 하지만 잡혀서 경찰서에 오게되었습니다.
입력
2. 경찰서에서는 물건을 담을만한 크기의 자루를 준비하고 갯수를 셀 사람을 앉힙니다.
3. 그런다음 취조를 하게되는데, 물건을 하나하나 꺼내놓기 시작합니다. 만약 첫번째 물건이 동일하게 나오면 갯수를 세는 사람은 카운트를 하게됩니다.
4. 모든 절차가 끝났다면, 물건의 종류와 갯수를 조사관에게 보고를 하게됩니다.
출력과 유한성
이렇게 설명하면 어느정도 이해가 쉬우시겠죠? ㅎㅎ 제가 문제를 풀때 주로 사용하는 방법입니다. 어떤 어떤 알고리즘을 구현하라 라고 한다면 막막하지만, 사회적현상에 빗대어 생각하면 이해속도가 빨라집니다. 물론 본인만의 구현방식이 다르지만, 막막하시다면 집에서 있었던 일을 절차적 형태로 그려보세요!
알고리즘은 어떤 문제에 있어 해결할 수 있는 모든 방법을 생각한 후 최적의 방법을 스스로 프로그래머가 결정하여 사용합니다. 이외에도 알고리즘을 수행하는 여러 방법등 이 있지만, 모든걸 설명할 수 가 없으므로, 댓글에 남겨주시면 그에 관한 포스트를 진행해보겠습니다.
정리하자면 알고리즘은 주어진 문제를 해결하기 위한 방법을 추상화하여, 일련의 절차를 논리적으로 컴퓨터 내 언어를 통하여 기술해 놓은 설명서라고 보시면 됩니다.
읽어주셔서 감사합니다~~.
'C' 카테고리의 다른 글
연결리스트(순차/연결자료구조)어떻게 이해하죠?[1] (0) | 2020.02.17 |
---|---|
재귀함수는 언제, 어떻게 사용하죠?(on c) (0) | 2020.02.14 |
구조체(struct)이 C에서는? (0) | 2020.02.14 |
배열과 포인터(array , pointer) 천천히~ (0) | 2020.02.14 |
자료구조 먹는건가요? (on c) (0) | 2020.02.14 |
댓글