본문 바로가기
c언어 강좌

[C언어 왕초보 탈출 강좌] 알고리즘, 제어 구조

by 두뇌향상중 2023. 5. 3.
반응형
C언어를 독학하시는 분들을 위해 포스팅합니다.
이 글은 완전 처음 접하는 왕초보 분들을 위한 강좌입니다.
가급적 자주 포스팅하겠습니다.

 

이전 포스팅까지는 C언어를 시작하기 전에 가장 기본이 되는 개념 몇 가지를 살펴보았습니다.

이 개념만 가지고도 바로 코딩이 가능합니다!

 

코딩을 본격적으로 시작하기 전에,

우리가 왜 코딩을 해야 하는지에 대해 그 근본적인 내용부터 살펴보고,

구조와 그 종류에 대해 알아보도록 하겠습니다.

반응형

알고리즘이란?

알고리즘이란 무엇일까요?

학생들에게 알고리즘이 무엇인지에 대해 질문을 하면,

대다수 학생들은,

다들 그게 뭔지는 알겠는데, 대답을 잘하지 못합니다.

 

쉽게 생각해 봅시다.

알고리즘은 어떤 문제를 해결하기 위한 어떠한 절차라고 말할 수 있을까요?

네! 맞습니다.

우리는 일상생활 속에서 다양한 알고리즘으로 주어진 과제를 하나하나 해결합니다.

이를테면, 배가 고파서 라면을 끓이려고 합니다.
어떤 사람은 라면을 끓일 때, 끓는 물에 면을 먼저 넣고, 다음에 수프를 넣습니다.
또 어떤 사람은, 물이 빨리 끓도록 끓기 전에 수프를 먼저 넣습니다.
또 어떤 사람은, 아예 처음부터 면을 먼저 넣고 라면을 끓이기 시작하는 사람도 있다고 칩시다.
결론은 라면이지만, 
최대한 맛있게, 빨리 끓이느냐는 어떤 순서대로 어떻게 끓이느냐에 따라 달라지겠죠~

알고리즘은 주어진 과제를 해결하기 위한 처리 절차나 계산 과정입니다.

그래서 알고리즘을 설계할 때에는, 효율적으로 처리하기 위해 여러 가지를 고려해야 합니다.

좀 더 일반적인 처리 절차는 없는지?
좀 더 빠르게 처리할 수는 없는지?
데이터 양을 좀 더 줄일 수는 없는지?

등과 같이 말이죠.

 

그러므로, 알고리즘을 학습하는 것은,

프로그래머의 프로그래밍 능력 향상에 직결됩니다.

 

알고리즘은 입력값에 따른 정확한 출력을 생성해야 하며,

어떠한 조건의 입력값이더라도, 정해진 시간 내에 정상적인 종료 해야 합니다.

이를 위해서, 알고리즘은 다양한 제어 구조와 데이터 구조를 사용합니다.

제어 구조: 프로그램의 실행 흐름을 제어하는 방법을 의미
데이터 구조: 데이터를 저장하고 조작하는 방법을 의미

알고리즘의 종류

알고리즘은 다양한 분야에서 사용됩니다.

검색 엔진의 경우 웹 페이지를 검색하는 알고리즘을 사용하고,

운송 회사는 물류 문제를 해결하기 위해, 경로 탐색 알고리즘을 사용합니다.

알고리즘은 또한 인공지능, 암호학, 그래픽스, 네트워크 등 다양한 분야에서 사용됩니다.

벌써 머리가 아파오나요?

이 기초강좌에서도 몇 가지 알고리즘을 다룰 것입니다.

다음은 우리가 다루어 볼 알고리즘입니다.

기술계산: 유클리드 호제법(최대공약수), 에라토스테네스의 체(소수)
정렬(sort): 선택 정렬, 교환 정렬(버블 정렬), 병합 정렬
검색(search): 선형 검색(linear search), 이진 검색(binary search)

알고리즘의 기초 제어 구조

순차구조: 코드 첫 줄부터 순서대로 동작
선택구조: 주어진 조건에 따라 분기
반복구조: 주어진 조건만큼 반복

프로그래밍 순서

마지막으로 프로그래밍을 하는 순서에 대해 살펴보겠습니다.

  1. 주어진 과제에 대해 분석
  2. 과제를 해결하기 위해 다양한 표현 방법으로 알고리즘을 설계
  3. 설계한 알고리즘을 바탕으로 프로그래밍
  4. 작성한 코드를 언어 번역기를 통해 기계어로 번역
  5. 컴파일을 하면서 오류 수정을 완료한 후에, 실행

이 기초 강좌에서는 순서도를 사용합니다.

기계어로 번역하는 과정을 컴파일이라고 부릅니다.

컴파일을 하면서 오류 수정을 하고, 실행하는 과정을 반복하게 될 텐데요,

이를 디버깅이라고 합니다.

코드를 수정하고 컴파일 후 한 번에 실행되기는 쉽지 않습니다.

처음부터 오류를 마주하더라도 그러려니 하고 계속 시도해야 합니다.

코딩하면서 실패하고 다시 시도하는 과정을 통해 "Soft Skill"이라는 자질을 익힐 수 있습니다.

 

이제 다음 포스팅부터는 본격적으로 제어 구조에 따른 코딩을 시작하도록 하겠습니다.

 

 

 

 

반응형

댓글