알고리즘(Algorithm)이란?

안녕하세요.

오늘은 알고리즘에 대해서 알아보도록 하겠습니다!


알고리즘(Algorithm)이란 무엇인가?

알고리즘은 문제 해결 방법을 정의한 일련의 단계적 절차이자 어떠한 문제를 해결하기 위한 동작들의 모임이다. (from. wiki…)

음.. 무슨 소리인지 모르겠는데요?
쉽게 말해보면 어떠한 문제가 있습니다.
이 문제를 해결하기 위해 미리 정해 놓은 프로세스를 통해 풀어나가려 할텐데요..
이때! 미리 정해놓은 프로세스를 알고리즘이라 생각하시면 편합니다!

위 그림을 보시면 Input과 Output 사이에 알고리즘이 있습니다.
내가 입력할 값(Input)으로 원하는 값(Output)을 도출해내는 과정을 알고리즘이라고 표현합니다.

예를 들어보겠습니다.
라면을 아주아주 먹고 싶어하는 사람이 있습니다.
그 사람은 라면을 먹기 위해서 라면을 끓이는 과정이 필요합니다.
이때, 라면을 끓이는 과정이 알고리즘에 해당하는 과정입니다.
 – Input : 라면 먹고 싶은 사람
 – 알고리즘 : 라면 끓이는 과정
 – Output : 라면을 맛있게 먹어보자

일상생활에서도 알고리즘과 같은 일련의 과정을 볼 수 있습니다.
IT를 하는 사람으로써 이런 과정을 알고리즘 이라 불러요~


왜 알고리즘 공부를 해야하는가?

알고리즘 공부를 왜 해야하나요?
세상에는 우리보다 훨씬 똑똑한 사람들이 많이 있죠.
그런 사람들을 우리는 천재라고 부릅니다.
천재들이 많이 쓰이는 알고리즘을 구현해놓고, 우리는 그것을 토대로 실전에서 써먹기 위해 분석하고 공부하는 것이죠!

이를테면, 숫자 10으로 100을 만들어야 한다고 문제가 주어졌을때
누군가는 10+10+10….+10 = 100 과 같이 10을 열번 더하는 사람이 있고
10×10 = 100 과 같이 곱셈으로 간단하게 해결하는 사람이 있을 수 있죠.

즉, 덧셈 뺄셈만 아는 사람보다 곱셈 나눗셈까지 알게 된다면 더 효율적으로, 더 빠르게 계산을 할  수 있듯이!
프로그램에서도 알고리즘 공부를 통해 프로그램을 더 효율적으로, 빠르게 만들기 위함이라고 생각합니다.


알고리즘의 종류는 무엇이 있나?

위에서 말씀드렸듯이, 알고리즘의 종류는 아주 많습니다.
그 중에서 오늘은 널리 쓰이는 알고리즘들을 간단하게 알아보도록 하겠습니다.

  1. 검색(Search) 알고리즘
    – 데이터 집합에서 특정 값을 검색하는 알고리즘
    – 선형 검색, 이진 검색 등 다양한 방식으로 사용 가능

  2. 정렬(Sorting) 알고리즘
    – 데이터를 정렬하는데 사용하는 알고리즘
    – 버블 정렬, 선택 정렬 등 다양한 방식으로 사용 가능

  3. 동적(Dynamic) 계획법
    – 하나의 문제를 작은 문제로 나눠 해결하는 알고리즘

  4. 그래프(Graph) 알고리즘
    – 정점과 간선으로 이루어진 알고리즘
    – DFS, BFS 등 다양한 알고리즘이 있음

  5. 탐욕(Greedy) 알고리즘
    – 매 순간에 최적이라고 생각되는 것을 선택하는 알고리즘
    – 최적이라고 생각해서 선택했지만 최적이 아닐 수 있음

이처럼 다양한 알고리즘이 있습니다.
이후 포스팅을 통해 차근차근 알아보도록 하고 오늘은 큰 틀만 알아보도록 하겠습니다.


좋은 알고리즘이란?

알고리즘이라고 해서 모두 다 좋은 알고리즘일까요?
  아닙니다!
그러면 어떤 알고리즘이 좋다고 말할 수 있을까요?
알고리즘이 소모하는 소요 시간을 시간 복잡도, 메모리 공간을 얼마나 잡아 먹는가를 공간 복잡도라 합니다.

이러한 복잡도를 측정하는 방법에 대해서 사람들은 “빅오(Big O) 표기법” 이란 표기법을 만들어 놨습니다.
빅오 표기법은 가장 널리 쓰이는 표기법이에요.

위 그림에서 O(1) 을 좋다고 표현하며, O(n!) 으로 갈 수록 좋지 않다고 표현 합니다.
결과적으로 알고리즘 내부에서 코드를 실행하기 위한 횟수가 시간과 관련되어서 효율이 좋고, 좋지 않고를 판단하는 지표가 됩니다.

올바른 알고리즘을 사용하기 위해서 해당하는 표기법을 통해 미리 계산해보고, 판단해서 프로그램에 적용한다면 보다 효율적으로 만들 수 있게 됩니다.

사실.. 프로그램을 실제로 만들어보면 해당 방법을 고려하지는 않지만, 고려하는 훈련도 필요하다고 생각이 드네요.

이상! 알고리즘에 대해 알아보았습니다.

오늘도 읽어주셔서 감사합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다