본문 바로가기
📑IT정보

알고리즘, 개발에서 빼놓을 수 없는 개념!

by 메가스터디IT 2023. 2. 14.

 


안녕하세요. 메가IT입니다:)

종종 인스타나 유튜브를 볼 때에 추천 영상 등이 뜨는 것을 보면 신기합니다. 어느새 추천으로 뜨는 알고리즘 영상들에 빠져서 시간이 훌쩍 지나 있거나 정말 원하는 내용들만 나오는 경우를 보셨을 겁니다. 이는 알고리즘의 영향으로 제공되는 것들이 많습니다. 메가스러운 IT지식 '알고리즘'에 대해서 살펴보겠습니다. 


🕵🏻‍♀️알고리즘(Algorithm)이란?

페르시아의 수학자 알콰리즈미의 이름에서 만들어진 단어가 바로 알고리즘인데요. 어떠한 문제를 해결하기 위한 절차나 방법을 의미하는데, 문제를 해결하기 위해 하나의 행동을 해야 하는데, 이 행동을 하기 위해서 잘 정리되어 만들어진 명령어들의 유한한 집합체라고 생각하면 됩니다. 

알고리즘의 조건(특징)

  • 유한성(Finiteness) - 각 단계별로 한정된 수로 작업, 유한 시간 내에 종료 필수
  • 명확성(Definiteness) - 단계마다 모호함 없이 명확해야 함
  • 유효성(Effectiveness) - 각 단계별로 유한한 시간 안에 수행할 수 있도록 단순해야 함
  • 입력 - 입력이 0일 수도 있지만, 외부에서 제공된 자료 필요
  • 출력 - 반드시 최소 하나 이상이 생성

이러한 특징을 바탕으로 알고리즘의 집합으로 만들어진 것이 바로 컴퓨터 프로그램입니다. 문제들을 해결하기 위해 프로그램, 기계로 실행하기 위해 만들어진 것인데요. 좀 더 쉽게 컴퓨터의 입장에서 풀이를 정리해 주는 과정이 필요합니다. 이를 컴퓨터 알고리즘입니다. 

👩🏻‍💻개발자 필수, 알고리즘 공부

대부분 코딩 테스트를 위해 알고리즘 공부를 시작하셨을 겁니다. IT 기업의 개발자로 취직하기 위해 필수적으로 코딩 테스트를 진행해야 합니다. 이때 테스트는 알고리즘으로 진행하는 경우가 많아서 필요한 공부 중 하나입니다. 

특히 프로그래밍에서 데이터를 구조적으로 표현하고 이를 구현하기 위해서는 알고리즘이 필요합니다.


🕵🏻‍♂️알고리즘과 자료구조

알고리즘 하면 따라 나오는 개념 중 하나인 자료구조가 있습니다. 자료구조 알고리즘에 대해서 논하는 기초 이론으로 컴퓨터 과학에서 중요한 기초 이론입니다. 어떤 자료구조 방식을 선택하느냐에 따라 효율적인 알고리즘을 선택할 수 있게 됩니다. 

자료구조(Data Structure)
컴퓨터가 데이터를 효율적으로 다룰 수 있게 도와주는 데이터 보관 방법과 데이터에 관한 연산의 총체입니다. 연산에 사용되는 메모리 자원은 한정적이기 때문에 무수히 많은 데이터를 처리하기 위해서는 효율적으로 사용할 수 있는 자료구조가 필요합니다. 

자료구조의 내부를 이해해야지만 라이브러리에서도 엉뚱한 자료구조를 사용하지 않을 수 있습니다. 지금부터 기본적인 자료구조에 대해서 알아볼게요!

 


👨🏻‍💻8가지의 자료구조 

  • 배열(Array) 
    가장 기본적인 데이터 구조이며 선형 구조입니다. 배열을 생성하게 될 시에 설정된 셀의 수는 고정이 되며, 인덱스 번호가 각각의 셀에 부여가 됩니다. 비교적 쉬워서 바로 만들어서 활용이 가능하며 원하는 데이터를 효율적으로 가져오거나 탐색도 가능합니다. 
  • 스택(Stack)
    선형 데이터 구조 유형으로 순서가 보존되어 있습니다. 데이터를 받는 순서대로 정렬이 되다 보니 빠른 런타임을 자랑합니다. 다만 받는 순서대로 정렬이 되고 가장 최신 요소의 데이터가 먼저 나가기 때문에, 한 번에 하나의 데이터만 처리가 가능합니다. 
  • 큐(Queue)
    스택과 비슷하지만, 데이터가 들어오는 위치는 가장 뒤에 있고, 데이터가 나가는 위치는 가장 앞부분에 있습니다. 
  • 그래프(Graph)
    nodes/vertices(노드) 사이에 edge(에지)가 있는 collectio이라고 합니다. 따로 지정된 방향이 없고, 데이터 구성이 다양한 그래프로 만들 수 있습니다. 
  • 트리(Tree)
    노드로 구성된 계층적 자료구조로, 자식(child) 노드를 가지며, 간선(edge)으로 연결되어 있습니다. 다양한 종류의 트리가 있고, 알아야 할 개념들을 숙지하는 것이 필요합니다. 
  • 힙(Heap) 정렬
    이진트리로 빠르게 여러 개의 값에서 가장 크거나 작은 값을 찾기 위해 만들어졌습니다.
  • 해시테이블(Hash table)
    복잡한 데이터 구조로 이루어진 해시테이블은 해시 함수를 사용하여 대량의 정보를 저장하고 특정 요소를 효율적으로 검색할 수 있습니다. 
  • 연결리스트(Linked List)
    동적인 데이터를 추가하고 삭제하는데 유리한 연결리스트는 순서를 가지고 있는 각 데이터 시퀀스가 연결된 순차적 구조입니다.


👩🏻‍💼자료구조와 추상적 자료형의 차이점

일단, 추상적 자료형어떤 문제를 해결하기 위해서 필요한 자료의 형태나 연산을 수학적으로 정의한 것인데요. 구체적인 룰이 없는 상태입니다. 자료구조이런 추상적인 자료형이 정의한 연산들을 바탕으로 구현한 구현체가 되겠습니다. 


👩🏻‍🏫개발 툴도 중요하지만, 근본을 알아야!

개발 툴은 각 개념을 바탕으로 만들어진 프로그램입니다. 그래서 먼저는 알고리즘과 자료구조에 대한 개념적인 부분을 이해해야지만 컴퓨터를 더욱 잘 다룰 수 있습니다. 언어를 배울 때에도 알파벳 등을 먼저 배우고 독해를 하듯, 개발도 마찬가지입니다. 

기업은 주어진 요구사항을 바탕으로 구현만 가능한 개발자를 원하지는 않습니다. 같은 상황이더라도 성능과 효율성까지 챙길 수 있는 개발자를 원할 것입니다. 알고리즘과 자료구조를 알고 있어야지만 실제로 해결하기 원하는 문제를 상황에 맞는 구조를 설계하고 작업할 수 있기 때문입니다. 그래서 기본적인 개념을 이해하고 배우는 것이 필요합니다. 

 

개발자 기본 개념, 알고리즘
https://bit.ly/3YLteWa

댓글