반응형

분류 전체보기 219

[3][알고리즘 - 정렬] 선택정렬(Selection Sort)이란? javascript 구현

선택 정렬(Selection Sort)이란? 정렬되지 않은 데이터들에 대해 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해나가는 방식입니다. 좀 더 쉽게 표현하면, 각 자리마다 가장 작은 값을 선택하는 개념 이라고 이해하시면 됩니다!! 출처 - https://ko.wikipedia.org/wiki/%EC%84%A0%ED%83%9D_%EC%A0%95%EB%A0%AC 생각보다 이해하는데 어렵지 않았던 개념이라 바로 javascript로 구현해보겠습니다. // 랜덤 임의 배열 만들기 const makeRandomValueArr = (length) => { const arr = []; for (let i = 0; i < length; i++) { arr.push(i); } for (let i = 0; i <..

[2][알고리즘 - 정렬] 버블정렬(Bubble Sort)이란? javascript 구현

버블정렬이란? 서로 이웃한 데이터들을 비교하며 가장 큰 데이터를 가장 뒤로 보내며 정렬 하는 방식입니다. 이모습이 꼭 버블같다고해서 붙여진 이름이라고 합니다. 정렬에 있어서 가장 기본이며 처음으로 배우는 정렬이라고 하니, 이를 통해 정렬의 사고력을 가져보자구요. 버블정렬의 동작 과정입니다. 위에서 말했듯 순차적으로 돌면서 2개씩 쌍으로 비교하여 가장 큰 값을 마지막으로 보내는 작업을 반복하여 수행합니다. 때문에, 배열의 크기에 따라 반복 수행되고, 그 안에서 한번더 배열의 크기에 따라 가장 큰 숫자를 마지막으로 밀어 넣는 작업을 합니다. 이를 간단하게 javascript로 구현해보겠습니다. const arr = [7,5,9,1,3,2,4]; // 버블 정렬 const bubbleSort = (array)..

[1][알고리즘 - 정렬] 정렬이란? 정렬 알고리즘(Sorting Algoritm)? 정렬 이유?

정렬이란? 원소들을 번호순이나 사전 순서와 같이 일정한 순서대로 열거하는 것을 의미합니다. 이러한 정렬을 위해 효율적인 문제 해결 과정을 정렬 알고리즘((Sorting Algoritm) 이라고 합니다. 그럼 정렬을 왜 해야 할까요? 사실 알고리즘이라는 목표는 효율적인 문제 해결을 위함입니다. 어떤 문제냐에 따라 방식과 결과물이 다르겠지만 결국에는 가장 빠르고 효율적인 작동을 하나의 목표로 합니다. 그러기 위해서는 효율적으로 데이터를 저장하는 방법을 이해해야 하고 (자료구조) 저장된 데이터를 효율적으로 찾을 수 있어야 합니다. 시간 복잡도에 대해 알아보면서, 효율적이고 정말 빠른 예시 중 이진 검색 기억하시나요? 이진 검색 또는 검색에 특화된 이진 탐색 트리는 데이터가 정렬이 되어 있다는 가정하에 해당 검..

[알고리즘 - 시간복잡도] 시간복잡도(Time Complexity)란? Bic-O표기법

시간복잡도란?(Time Complexity) 문제를 해결하는데 걸리는 시간을 시간복잡도라고 합니다. 걸리는 시간을 명확하게 알면 좋겠지만 같은 알고리즘이라도 서로 다른 성능의 컴퓨터 처리에 따라서 걸리는 시간 또한 각각 달라질 수 있습니다. 때문에,주로 점근적 분석법을 통해서시간복잡도를 나타냅니다. 점근적 분석법이란 입력되는 데이터의 크기에 따라 수행 시간과 공간이 얼마나 차지하는지 알아보는 탐색법입니다. 점근적 분석법에는 아래와 같이 3가지 표기법으로 나뉩니다. 최상의 경우 : 오메가 표기법 (Big-Omega(Ω) Notation) 평균의 경우 : 세타 표기법 (Theta(θ) Notation) 최악의 경우 : 빅오 표기법 (Big-O Notation) 평균의 경우는 기준이 모호하고, 최악의 경우를 ..

[12] [알고리즘 - 자료구조] 파일구조란? 순차파일, 색인파일, 직접파일

파일구조란? 파일은 고유한 이름을 갖는 것을 말하며, 관련된 정보 단위의 집합을 의미합니다. 파일 시스템은 보조 기억 장치에 저장되어있는 파일들을 관리해주는 총체적인 기술 체계를 의미합니다. 파일구조라는 것은 파일에서의 데이터를 표현하는 방식과 데이터에 접근하는 연산에 관한 것을 다루는 학문이기도 하며, 파일의 구조는 파일을 구성하는 레코드들이 보조기억장치에 편성되는 방식을 의미합니다. 순차 파일(Sequential File) 파일 내용이 하나의 긴 줄로 늘어선 형태로 저장되어 있어 순차 접근만 가능한 구조입니다. 판독할 때도 순차적으로 접근하기 때문에 순차 접근 방식이라고도 합니다. 급여 업무처럼 전체 자료를 처리 대상으로 일괄 처리하는 업무에 사용됩니다. 장점은 모든 데이터가 순서대로 기록되기 때문에..

[11] [알고리즘 - 자료구조] 그래프(graph)란? (비선형구조) javascript 구현

그래프란? 자료 간의 관계가 망구조와 같이 복잡한 경우에 사용하며, 연결되어 있는 정점과 정점 간의 관계를 표현할 수 있는 자료구조입니다. 트리와 그래프의 차이점을 살펴보면 그래프는 루트 노드가 존재하지 않고, 방향 또는 무방향 그래프가 모두 존재합니다. 예시로 위 사진과 같은 최단 경로를 예시로 들 수 있습니다. 그래프는 vertex와 edge로 구성됩니다. 그래프는 대표적으로 위와 같은 종류의 그래프가 있습니다. 무방향 그래프 - 방향이 없는 그래프. 방향 그래프 - 정점 간의 간선이 방향을 갖고 있는 그래프. 가중치 그래프 - 정점 간의 간선에 가중치를 부여한 그래프. 순환 그래프 - 순환이 존재하는 그래프. 비순환 그래프 - 순환이 없는 그래프. 그래프 표현 방법 인접 행렬 (Adjacency M..

[10] [알고리즘 - 자료구조] 트리(tree)란? (비선형구조) javascript 구현

트리(tree)란? 나무가 하나의 뿌리에서 줄기가 나와 가지로 나누어지는 것처럼 나무를 거꾸로 뒤집어 놓은 형태로, 자료가 가지처럼 나뉘어서 계속 뻗어 나가는 계층구조를 트리 구조라고 합니다. 루트노드(root node) - 부모가 없는 최상위 노드 부모노드(parent node) - 노드에 연결된 한 단계 상위 레벨 노드 형제노드(sibling node) - 같은 부모를 가지는 노드 단말노드(leaf node) - 자식이 없는 노드 높이(height) - 깊이 최댓값 크기(size) - 모든 노드의 개수 깊이(depth) - 루트 노드로부터의 거리 차수(degree) - 각 노드의 간선 개수 레벨(level) - 노드의 특정 깊이를 가지는 노드의 집합 * 전체 간선의 개수는 (트리가 N개 일 때) N ..

[9] [알고리즘 - 자료구조] 비선형구조란?

비선형구조(NonLinear Structure)란? 비순차적인 성질을 지닌 자료입니다. 즉, 일렬로 나열하기 힘들고 자료의 순서가 불규칙해서 연결 관계가 복잡한 구조입니다. 1:다, 다:다 등등 여러 형태를 지녔을 때 사용됩니다. 일상에서 쉽게 접할 수 있는 지하철 노선도, 사람들 간의 관계, 조직도 등이 비선형 구조의 대표적인 예입니다. 선형구조와 비교를 하면 데이터가 연속적으로 연결된 모양과는 다르게 불규칙적이고 예상하기 힘든 구조임을 알 수 있습니다. 비선형구조로는 트리, 그래프가 있습니다. [10] [알고리즘 - 자료구조] 트리(tree)란? (비선형구조) javascript 구현 트리(tree)란? 나무가 하나의 뿌리에서 줄기가 나와 가지로 나누어지는 것처럼 나무를 거꾸로 뒤집어 놓은 형태로, ..

[8] [알고리즘 - 자료구조] 덱(Deque)이란? (선형구조) javascript 구현

덱(Deque) 이란? 양쪽 끝에서 삽입과 삭제를 모두 허용하는 자료의 구조입니다. 스택과 큐의 복합 형태죠. 이런 형태가 될 수 있겠네요. 이번에는 javascript의 내장 객체를 사용하여 빠르고 간단하게 구현해보겠습니다. class Deque { #items; #size; constructor() { this.#items = []; this.#size = 0; } // 처음 삽입 firstIn(data) { this.#items.unshift(data); this.#size++; } // 처음 제거 firstOut() { this.#items.shift(); this.#size--; } // 마지막 삽입 lastIn(data) { this.#items.push(data); this.#size++; ..

[7] [알고리즘 - 자료구조] 큐(Queue)란? (선형구조) javascript 구현

큐(Queue) 란? 가장 먼저 리스트에 삽입된 원소가 가장 먼저 삭제되는 구조입니다. FIFO(First In First Out) 특징을 가지고 있습니다. 가장 쉬운 예로 일상생활에서 쉽지 볼 수 있는 예입니다. 가장 먼저 줄은 선 사람이 가장 먼저 타는, 일반적인 줄을 서는 구조입니다. 데이터는 이렇게 이동을 하겠네요! Javascript로 구현을 해볼게요. in(item) { this.#item.push(item); } out() { return this.#item.shift(); // 0번째 제거 } 내장 객체를 사용하여 배열로 아주 간단히 구현이 가능합니다. class Queue { #items; constructor() { this.#items = []; } in(data) { this.#it..

반응형