일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- While
- 기초
- 자료형
- g1gc
- IAC
- 연산자
- If
- ansible
- Kotlin
- jvm
- Class
- SpringBoot Initializr
- Spring Security
- Java
- JPA
- redis
- UserDetails
- C++
- Algorithm
- zgc
- MergeSort
- programmers
- quicksort
- datastructure
- lambda
- Sprint Security
- JavaScript
- Fluent-bit
- For
- datatype
- Today
- Total
목록BLOG HOME (78)
뭐라도 끄적이는 BLOG
변수 변수(variable)는 데이터를 저장할 때 쓰이는 이름이 붙은 저장소 이다. JavaScript에선 let또는 var 키워드를 사용하여 변수를 생성한다. let과 var는 변수를 선언하는 키워드 라는 점에서 같지만 var는 초기 JavaScript의 구현 방식때문에 let과 다른 방식으로 동작한다. var는 오래된 스크립트에서 볼 수 있으며 근래엔 쓰지 않는다. 대표적으로 let은 블록 레벨 스코프를 지원하며 var는 함수 레벨 스코프를 지원한다. 이로 인해 의도치 않은 부작용이 발생하기도 한다. 아래 문(statement)은 'message'라는 이름을 가진 변수를 생성(선언)한다. let message; 이제 할당연산자 (=)을 이용해 변수 안에 데이터를 저장한다. message = 'Hell..
JavaScript 란? 자바스크립트는 HTML, CSS로 만든 정적인 웹 페이지에 복잡한 기능을 구현할 수 있도록 하는 스크립팅 언어이자 프로그래밍 언어이다. 웹 페이지 내용이 가만히 정적인 정보만 보여주는 것이 아니라 주기적으로 갱신되거나 사용자 상호작용이 가능하거나, 애니메이션이 적용된 2D/3D 그래픽을 볼 수 있다면 거의 JavaScript가 관여하고 있을 거라고 생각해도 된다. 브라우저에는 자바스크립트 가상머신이라 불리는 JavaScript engine이 내장되어 있다. 엔진의 종류는 Chrome의 V8, Firefox의 SpiderMonkey등이 있다. 자바스크립트는 브라우저뿐만 아니라 서버로써 실행될 수 있다. 2009년 라이언 달이 발표한 Node.js는 V8 자바스크립트 엔진으로 빌드된..
먼저 QuickSort와 MergeSort중 어느것을 사용하는 것이 좋은가 에 대해서 명확한 해답은 내릴수 없다. 무조건 누가더 낫다라는 것보다 각각 어떤 상황에서 조금더 좋은 효율이 좋은지에 대해 생각해 봐야한다. Hybrid algorithm이 아닌 단순 Quick과 Merge만 비교해 본다. 배열에서 QuickSort와 MergeSort에서는 QuickSort가 좋다고 할 수 있다. 배열에서 MergeSort는 추가 공간을 사용하고 QuickSort는 Merge보다 적은 공간을 사용한다. 그리고 캐시 Locality(지역성)이 QuickSort가 더 좋다. QuickSort의 최악의 경우인 O(n^2)는 pivot의 설정으로 피할 수 있다. MergeSort는 대용량 데이터에 적합하다. QuickS..
MergeSort는 분할 정복 알고리즘 중 하나이다. 배열을 절반으로 나누는 MergeSort를 재귀적으로 불러 각 크기가 1이 될 때까지 나눈다. 나눈 것들을 다시 하나의 배열로 만들면서 정렬한다. Divide Combine MergeSort 과정 MergeSort C Code void merge(int* arr, int left, int mid, int right) { int i, j, k; int n1 = mid - left + 1; int n2 = right - mid; int *L, *R; L = malloc(sizeof(int) * n1); R = malloc(sizeof(int) * n2); for (i = 0; i < n1; i++) L[i] = arr[left + i]; for (j = ..
QuickSort는 분할 정복 알고리즘 중 하나이다. 임의의 요소 하나를 pivot으로 선택하고 선택한 pivot을 기준으로 숫자를 분할한다. pivot을 선택하는 방법은 여러 방법이 있다. 첫 번째 요소를 pivot으로 선택 마지막 요소를 pivot으로 선택 임의의 요소를 pivot으로 선택 중앙 요소를 pivot으로 선택 배열을 오름차순으로 정렬하는 경우를 예시로 한다. 우선 배열의 한 요소를 pivot으로 선택한다. (그림은 첫 번째 요소를 pivot으로 선택) 이제 pivot을 제외하고 pivot보다 작은 요소를 앞(배열의 작은 인덱스)에 두고 pivot보다 큰 요소를 뒤(배열의 큰 인덱스)로 두어야 한다. 이때 분할된 두 그룹은 정렬되어 있지 않다. pivot을 작은 값들과 큰 값들의 사이에 놓..
Algorithm은 문제 해결 방법을 정의한 단계적 절차이다. 계산을 실행하기 위한 단계적 절차를 의미하기도 한다. 즉, 문제 풀이에 필요한 계산 절차 또는 처리 과정의 순서를 말한다. 이러한 알고리즘은 달성하고자 하는 목표에 따라 단순할 수도 있고 복잡할 수도 있다. 알고리즘 유형 Brute Force Algorithm(무차별 대입 알고리즘): 문제에 대한 가장 간단한 접근 방식으로 문제를 발견했을 때 가장 먼저 시도하는 접근 방식이다. 무차별 대입 알고리즘은 주어진 문제에 대해 가능한 모든 방법 또는 가능한 모든 해결책을 열거하는 직관적이고 직접적이며 간단한 문제 해결 기법이다. Recursibe Algorithm(재귀 알고리즘): 함수가 직접 또는 간접적으로 자신을 호출하는 과정을 재귀라고 하며 해..
그래프(Graph)는 객체 사이의 연결 관계(Connectivity)를 표현하는 자료구조이다. 그래프는 노드(Node or Vertex)와 간선(Edge)의 집합이다. 노드는 일반적으로 모델링하려는 시스템을 구성하는 객체를 나타내며, 간선은 이러한 객체 사이의 관계를 정의한다. 간선의 특성에 따른 그래프의 종류 구분 종류 설명 간선의 방향성 무방향 그래프 간선에 방향이 없는 그래프 (양방향 통행) 방향 그래프 간선에 방향이 잇는 그래프 (일방 통행) 간선의 가중치 가중 그래프 간선에 가중치가 할당된 그래프 구조적 특징 완전 그래프 연결 가능한 최대 간선 수를 가진 그래프 부분 그래프 그래프에서 일부의 노드나 간선을 제외하여 만든 그래프 다중 그래프 중복된 간선을 포함하는 그래프 무방향 그래프(Undire..
트리(Tree)는 계층구조(Hierarchical Structure)로 자료를 저장한다. 여기서 계층 구조란 트리를 구성하는 노드가 부모-자식(Parent-Child)관계라는 의미이다. 즉, 특정 부모 노드 하나에 여러 개의 자식 노드들이 연결되는 구조를 말한다. 이러한 계층구조의 대표적인 예로 컴퓨터의 폴더 구조를 들 수 있다. 트리는 하나의 부모 노드에 여러 개의 자식 노드가 연결되어 있다. 그래서 트리를 구성하는 부모-자식 노드의 관계가 일대일이 아니라는 점에서 비선형 자료구조이다. 반대로 각 노드의 부모 노드는 모두 1개라는 점은 주의하기 바란다. 트리의 개념 트리(Tree)는 노드(Node)와 간선(Edge)의 집합이다. 보통 노드는 일반적으로 모델링하려는 시스템의 객체(Object)를 나타낸다..
자료구조에서 사용되는 큐(Queue)는 줄 서기의 특징을 가지고 있다. 즉, 큐는 추가되는 자료를 차례대로 저장하여, 저장된 순서에 의해 데이터가 나오는 자료구조이다. 먼저 저장된 데이터가 나중에 저장된 데이터 보다 항상 앞서 나오기 때문에 큐는 FIFO(First-In-First-Out)이라는 특성을 가진다. 이를 '피포'라고 읽으며 다른 말로 선입선출(先入先出)이라고도 한다. 이런 FIFO의 특성은 현실세계에도 찾아볼 수 있다. 대표적으로 은행에서 발행하는 대기표를 예로 들 수 있다. Queue에서 가장 앞에 있는 고객은 가장 먼저 도착한 고객이며, 가장 뒤에 있는 고객은 가장 나중에 도착한 고객이된다. 순서가 가장 빠른 고객이 먼저 Queue를 먼저 빠져나와 업무를 처리할 수 있다. Queue에서의..
영어 단어 stack은 동사로 '쌓다'라는 뜻이 있으며, 명사로는 '무더기[더미]'를 의미한다. 자료구조에서의 Stack도 이와 마찬가지로 자료를 쌓아두는 기능을 수행한다. 즉, Stack이라는 자료구조를 통해 여러 자료를 쌓아둘 수 있게 한다. Stack의 고유한 특성을 이야기할 때 자장 대표되는 단어로 LIFO(Last-In-First-Out)를 들 수 있다. 대게 '리포'라고 읽으며 "Last-In-First-Out"이라는 단어에서 알 수 있듯이, "가장 나중에 들어간 자료가 가장 먼저 나온다."라는 뜻이다. 이를 다른 말로 후입선출(後入先出)이라고도 한다. Stack에서 자료의 추가 혹은 반환(꺼내는 것)은 스택의 끝에서만 가능하다. 여기서 말하는 Stack의 끝이란 스택의 제일 위(Top), 즉..