비트를 쪼개는 개발자

allen321@naver.com

전체 글 82

자료구조 - Heap

Heap 이란 ?  Heap은 완전 이진 트리(Complete Binary Tree)*의 형태를 가진 자료구조 이며 여러 데이터들 중 최소값 데이터 혹은 최대값 데이터를 빠르게 찾기 위해 고안한 자료구조다.  (완전 이진 트리 : 트리의 모든 레벨이 꽉 채워져 있으며 왼쪽부터 오른쪽으로 채우는 트리)    Heap의 특징   힙은 완전 이진 트리의 형태를 가진다. 부모노드의 값이 자식노드의 값보다 큰 경우 최대 힙으로 표현한다. 자식노드의 값이 부모노드의 값보가 큰 경우 최소 힙으로 표현한다. 힙을 구현할때는 배열을 이용하여 구현한다. 힙에 데이터를 삽입하거나 삭제한 후에는 꼭 HeapifyUp이나 HeapifyDown을 사용하여 힙의 속성이 깨지지 않도록 한다. 힙은 모든 언어에서 기본 라이브러리로 지..

자료구조 2024.05.15

자료구조 - Tree (2)

자료구조 중 Tree는 여러 형태, 여러 종류를 가지고 있다. 각각의 Tree 별로 고유한 특징이 있으며 그 특징에 따라 데이터를 관리하거나 특정 알고리즘을 수행할 때 최적의 역할로 기능한다.   Tree의 종류     이진 트리 (Binary Tree) 모든 노드들이 둘 이하 (0,1,2)의 자식 노드를 가지는 트리 같은 수의 자식 노드를 가지고 있어도 자식 노드의 위치가 왼쪽이냐 오른쪽이냐에 따라 각각 다른 이진 트리로 구분함. 이진 트리 중에서도 많은 종류의 이진트리가 있음.  이진 탐색 트리 (Binary Search Tree) 왼쪽 자식 노드는 부모보다 작고 오른쪽 자식 노드는 부모보다 큰 이진트리 탐색 과정이 트리의 높이만큼 탐색하기 때문에 O(logN) 의 시간복잡도를 가짐. 편향트리가 되어..

자료구조 2024.05.13

자료구조 - Tree (1)

Tree 란?  비선형 자료구조인 Tree는 계층적인 관계 구조를 지닌다. 여러개의 노드로 이루어지며 이들이 연결된 형태로 데이터를 구성함.   Tree의 구성 요소  구성 요소로는 루트(root) 노드, 자식(child) 노드, 부모(parent) 노드, 리프(Leaf) 노드 등이 있으며 노드의 위치와 거리는 깊이(Depth) 와 높이 (Height) 로 나타낸다.  ○  노드 (Node) 트리의 구성 요소 (Data) 모든 트리는 여러개의 노드를 바탕으로 이루어짐.   ○  간선 (Edge) 노드와 노드를 연결하는 선이다. 전체적인 트리의 구조를 형성하는 역할   ○  루트 노드 (Root Node) 트리 구조의 최상단에 위치하는 노드 트리의 시작점이고 루트 노드는 부모가 없음   ○  리프 노드 (..

자료구조 2024.05.11

자료구조란? [Data Structure]

자료구조란?  자료구조는 데이터를 효율적으로 저장 및 관리하기 위해 이를 보관하거나 관리하는 방식을 의미함. 많은 데이터를 효율적으로 보관하면 데이터에 접근할 때 빠르게 접근하고 처리할 수 있는데 자료구조의 형태와 유형은 알고리즘에 따라 좋은 성능을 발휘하기도 함.   자료구조의 종류   자료구조는 크게 선형구조와 비선형구조로 나뉜다.  선형 구조 (Linear Data Structure) 데이터가 순차적, 수평적으로 나열되며 한 줄로 연결되어 있음. 데이터 항목들이 연속저으로 위치하기 때문에 접근과 구현이 쉬움. 단일 레벨로 표현되기 때문에 한번의 실행으로 모든 요소를 순회할 수 있음. 데이터의 전후 관계가 1:1임.  비선형 구조 (Non - linear Data Structure)   데이터가 수직..

자료구조 2024.05.11

자료구조 - Linked List (예제) - C#

Single Linked List 를 구현하는 예제 클래스와 메소드 예제이다.   우선 데이터와 포인터를 담아둘 Class를 정의하고 (Node) 이 Node들을 연결해 LinkedList로 만들기 위한 메소드들이 포함된 Class도 만들어주자.  LinkedList Class에는 Node의 시작 노드를 담아둘 head를 따로 정의해주고  새로운 Node를 앞에 붙일 것인지, 뒤에 붙일 것인지에 따라 해당 기능을 구현 할 함수를 따로 만들었다.  그리고 특정 값을 가진 데이터를 삭제하는 노드, 지금까지의 노드들을 확인 할 Print 함수까지 구현하면  Single Linked List를 구현할 수 있는 기능들이 완성된다.    Node Class public class Node // 단일 노드 클래스 {..

자료구조 2024.05.11

C# [프로그래머스] 음양 더하기

absolutes 라는 int 배열을 받아와서 signs의 배열 값이 true 일 경우 양수, false 일 경우 음수로 absolutes의 숫자를 변경하고 이를 모두 합한 숫자를 answer로 반환하면 되는 문제다. public static void Main(){ int[] absolutes = new int[] { 4, 7, 12 }; // 숫자 배열 bool[] signs = new bool[] { true, false, true }; // 음양 결정 bool 값 Console.WriteLine(Solution(absolutes, signs));}public static int Solution(int[] absolutes, bool[] signs){ int answer = 0;..

코딩테스트 2024.05.09

시간복잡도(Time Complexity) 란 ?

알고리즘 문제를 풀다보면 가끔 결과값은 올바르게 도출 되지만 시간 제한에 걸린다거나연산 횟수가 기준 횟수를 초과하여 불합격 처리 되는 경우가 가끔 생긴다. 알고리즘을 사용해 코드를 구현할때 해당 방법이 효율적인지 고민한다는것은 이 시간복잡도를 고려하는것과 같다고 볼 수 있다.  시간 복잡도 란 ? 코드를 실행할때 입력값과 해당 연산을 수행하는데 걸리는 시간과의 상관관계를 나타내는 척도이다. 주로 이 시간복잡도를 나타낼때는 빅-오(Big-O)* 표기법을 이용해 나타낸다.  시간 복잡도 표기법은 입력값의 크기에 따라 걸리는 시간이 최선(오메가), 평균(세타), 최악(빅오)으로 나뉘지만 이 중 빅-오는 최악을 기준으로 한다.  빅-오(Big-O) 란 ?  Big-O란 알고리즘이 수행되는데에 걸리는 시간이 얼마..

알고리즘 2024.05.07