안녕하세요. 메가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
'📑IT정보' 카테고리의 다른 글
국비지원 코딩교육, 어떻게 신청하면 되나요? (0) | 2023.02.28 |
---|---|
개발언어는 C, Java, Python만 있는거 아니에요? 우리가 모르는 개발언어들 (0) | 2023.02.17 |
탈중앙화? 웹 3.0의 개념은? (0) | 2023.02.09 |
안드로이드 앱개발은 왜 코틀린으로 할까? (0) | 2023.01.31 |
자바와 자바스크립트? 무슨 차이인가요? (0) | 2023.01.27 |
댓글