[C#] 알고리즘 개념

AsiaticRicecake·2025년 4월 2일

알고리즘이라는 단어는 정말 많이 들어봤을 것입니다.

유튜브 알고리즘, OTT 알고리즘 등 단어도 있지만
치지직 스트리머분들이나 숲(SOOP) 방송인분들도 방송중에 많이 언급하기도 하고
우리도 일상에서 많이 사용하는 단어인데요.

그렇다면 알고리즘은 대체 무슨 뜻일까요?

1. 📖 알고리즘

알고리즘이란 문제를 해결하기 위한 과정을 논리적 절차에 따라 구성한 일련의 단계이며,
입력값에 따른 결과가 도출됩니다.

한마디로 문제해결능력이라고 보시면 됩니다.

흔히 네비게이션 길찾기가 대표적인 알고리즘이라고 보시면 됩니다.
출발지, 도착지를 적으면 자동으로 길을 안내하는 시스템 많이 써보셨을텐데요.
보기에는 간단해보일 수 있는데 그 과정을 수행하는데 수많은 연산을 통해 만들어집니다.


1-1 🔖 알고리즘 조건

알고리즘을 설계할 때는 여러가지 고려사항이 있습니다.

① 입력

알고리즘에서 입력은 기본입니다. 최소 0개 이상의 입력을 가져야 합니다.

② 출력

최소 1개 이상의 결과를 가져야 합니다.
당연한 이야기지만 결과를 기대하고 사용하는 건데 결과값이 없으면 그건 알고리즘이 될 순 없겠죠

③ 명확성

알고리즘은 결국 문제해결을 위한 방법인데 정확한 결과값이 나와야 좋은 알고리즘이라고 할 수 있겠습니다.

④ 유한성

수행 과정이 무한하다면 결과를 도출할 수 있을까요? 당연히 결과가 나오는 유한한 값이어야겠죠.

⑤ 효과성

내가 설계한 알고리즘이 돌아가기만 한다고 끝이 아닙니다. 그 알고리즘이 명백하게 실행이 가능해야 하며, 의미없거나 불가능하면 안됩니다.


1-2 🔖 알고리즘 설계

그렇다면 알고리즘을 구현하려면 어떻게 구성하면 될까요?
다음의 과정으로 설계를 진행합니다.

문제의 이해 →
예시와 테스트 케이스 작성 →
알고리즘 설계 →
알고리즘 구현 및 검증 →
알고리즘 분석과 개선

1-2-1 ✔️ 문제의 이해

알고리즘을 설계한다고 하면 먼저 문제가 뭔지 제대로 이해해야 합니다.
첫 설계부터 잘못되면 결과물이 당연히 좋을 수가 없겠죠.
그래서 가장 먼저해야 하는 것이 문제요구사항을 분석하고 입력과 출력의 형식을 파악하는 것 입니다.

1-2-2 ✔️ 예시와 테스트 케이스 작성

첫 번째로 문제를 정확히 이해하고 입출력 형식을 파악하는 과정을 수행했다면 그 다음으로는

몇 가지 예시를 들어서 무엇을 넣었을 시에 어떤 결과를 도출해야 하는지 파악해둘 필요가 있습니다.

이를 테스트 케이스라고 합니다.

1-2-3 ✔️ 알고리즘 설계

문제를 해결하기 위한 본인만의 알고리즘을 구상해보는 단계입니다.
알고리즘 설계에 가장 최우선 목표는 정확도입니다.

코드를 치기 전에 의사코드 또는 흐름도를 먼저 그리는 것이 좋습니다.

여기서 의사코드(슈도코드, pseudocode)는 특별한 개념은 아니고 컴퓨터가 알아듣는 언어가 아닌 코드를 치는 프로그래머들이 해당 내용을 구현한다는 것을 대략적으로 작성해보는 것을 말합니다.

while(b가 100보다 작다면?)
{
  i를 1 올린다;
  if(배열의 i번째 요소가 10보다 크다면?)
    {
      b를 제곱 시킨다;
      n도 올려서 총 b가 몇번 제곱되었는지 측정;
    }
}

보시는 것과 같이 그냥 이렇게 설계하겠다는 것을 한글로 적어둔 것입니다. 따로 작성 방식이 있는 것이 아니라서 원하시는대로 하시면 됩니다.

1-2-4 ✔️ 알고리즘 구현 및 검증

설계에서 만든 의사코드나 흐름도에 따라 코드를 작성하며 알고리즘은 구현하는 과정입니다.

제작 후에는 사전에 만들어 둔 테스트 케이스를 통해 검증을 거치면 됩니다.

만약 정확도가 중요한 프로그램이라면 알고리즘의 타당성을 검증하기 위한 테스트케이스를 만들어주는 프로그램을 작성하여 검증하는 절차를 거치기도 합니다.

1-2-5 ✔️ 알고리즘 분석과 개선

알고리즘이 잘 작동하고 있는지 분석하는 단계로 여기서 이제 효율적으로 만들어주는 과정을 수행하시면 됩니다. 즉 최적화가 잘 되어있는지 개선의 여지있는지 확인합니다.

결국 알고리즘은 정확히 내가 원하는 결과가 나오는 지가 중요하지 효율성은 다음 문제입니다.

아무리 좋은 최적화를 보여주어도 자기가 원하는 출력이 나오지 않는다면
수정을 거치거나 최악의 경우 처음부터 다시 설계를 할 수도 있습니다.

0개의 댓글