일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 |
- heap
- 선택정렬
- 삽입정렬
- 백준
- 15552번
- 분할정복
- 코테준비
- 코테
- divide and conquer
- stack
- 이진트리탐색
- 연결리스트
- 트라이
- 파싱
- Timsort
- 스터디
- 우선순위 큐
- 해시함수
- collections.sort
- 자료구조
- MSA
- LinkedList
- 큐
- 코딩테스트
- 프로그래머스
- 팀정렬
- 힙
- 거품정렬
- 퀵정렬
- 스택
- Today
- Total
목록분류 전체보기 (97)
Little bIT awesome

Stack 스택(Stack)의 사전적 정의는 '쌓다', '더미'이다. 즉, 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조라고 할 수 있다. 그림과 같이 스택은 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 구조 특징이 있는데, 이러한 자료의 구조를 LIFO(Last In First Out) 구조라고 말한다. Stack 사용처 스택은 수식계산, 수식 괄호 검사, undo / redo, 웹브라우저의 뒤로 / 앞으로 등에 사용된다. JVM(자바 가상 머신)의 Runtime Data Area에 Stack 메모리에도 사용된다. Stack은 마지막으로 사용이 끝난 지역변수를 바로바로 쳐내버려 메모리를 매우 효율적으로 사용하는 방법이기 때문에 스택의 구조 개념이 프로그래밍 메모리 영역에 고대로 사용되는 것이..

TimSort 창안자인 Tim Peters의 이름을 따서 팀 정렬(Tim sort) 알고리즘이라고 부른다. 처음 만들어졌을 때는 Python을 위해 C언어로 구현되었으나 현재 Java, Android, Google Chrome, swift 등에서 표준 정렬 알고리즘으로 채택되었다. 특징 '실제 데이터는 대부분 이미 정렬되어 있을 것이다.'라는 가정에 기반한 정렬 알고리즘 삽입정렬과 병합정렬을 적절히 조합한 알고리즘 현업에서 병합정렬, 퀵정렬보다 널리 쓰이는 정렬 알고리즘 현실세계의 데이터들이 완전 무작위로 배열돼 있기 보단 어느 정도 정렬된 상태로 배열돼 있는 경우가 많다면 정렬을 해야하는 전체 배열을 작은 덩어리들로 잘라 각각의 덩어리를 Insertion Sort로 정렬한 뒤 Merge Sort로 병합..

쿠버네티스 간단히 말하면, 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고 확장 가능한 오픈소스 플랫폼이다. 무언가 프로그램을 개발해서, 사람들에게 서비스를 제공하려면 특정 서버에 자신이 만든 소프트웨어를 배포(Deploy)해야 한다. 이 "배포(Deployment)" 방식의 변화 과정을 이해하는 것이 컨테이너, 도커, 쿠버네티스의 개념을 이해하는데 있어서 중요하다. 전통적인 배포 (Tradtional Deployment) 가장 오래되고 단순한 방식 물리적인 컴퓨터 한 대에 하나의 OS를 깔고, 여러가지 프로그램을 설치하는 방식 단점 다른 OS를 설치하려면 컴퓨터가 하나 더 필요하다. 같은 컴퓨터 리소스를 공유하므로, 배포한 애플리케이션끼리 서로 영향을 줄 수 있으며 이는 성능 문제를 발생시..
오픈소스 오픈소스 소프트웨어를 뜻하는 용어 공개적으로 액세스할 수 있게 설계되어 누구나 자유롭게 확인, 수정, 배포할 수 있는 코드 동료 평가 (peer review)와 커뮤니티 기반 프로덕션에 의지하므로, 분산된 동시에 협업 방식으로 개발된다. 단일 작성자 또는 기업이 아닌 커뮤니티가 개발하므로 독점적 소프트웨어보다 저렴하고, 유연하며, 지속성있다. 반드시 무료로 제공되는 실행 가능한 소프트웨어라는 의미는 아니다. 단, 그 소스 코드는 무료로 제공되어야 한다. 예를 들면, Red Hat Enterprise Linux의 소스 코드는 누구에게든 무료로 제공되지만, 이러한 소스 코드를 실행 가능한 코드로 변환하는 데는 전문 지식과 시간, 서버가 필요하다. Red Hat Enterprise Linux용 프로덕..

도커 Go언어로 작성된 리눅스 컨테이너를 기반으로 하는 오픈소스 가상화 플랫폼 다시 말해, 특정한 서비스를 패키징학 배포하는데 유용한 오픈소스 프로그램이다. 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는데 필요한 모든 것이 포함되어 있다. 가상 머신에 비해 꼭 필요한 것만 담겨서 구동되기 때문에 이미지를 만들 경우 용량이 대폭 줄어들게 된다. 하이퍼바이저 vs 컨테이너 하이퍼바이저 호스트 하드웨어에 설치되어 호스트와 게스트를 나누는 역할을 하고 각각의 게스트는 하이퍼바이저에 의해 관리되며 시스템 자원을 할당받게 된다. 이 때, 하이퍼바이저에 의해 생성된 게스트는 호스트나 다른 게스트와 상호 간섭하지 않고 완전히 분리된 환경에서 구동된다. 하이퍼바이저를 활용하면 마치 하드웨..
Comparison Sort N개 원소의 배열이 있을 때, 이를 모두 정렬하는 가짓수는 N!임 따라서, Comparison Sort를 통해 생기는 트리의 말단 노드가 N! 이상의 노드 갯수를 갖기 위해서는, 2^h >= N! 를 만족하는 h를 가져야 하고, 이 식을 h > O(nlgn)을 가져야 한다. (h는 트리의 높이,,, 즉 Comparison sort의 시간 복잡도임) 이런 O(nlgn)을 줄일 수 있는 방법은 Comparison을 하지 않는 것 정렬하는 숫자가 특정 범위 안에 있을 때 사용함 Process public static void countingSort(int[] arr, int n) { // {5, 4, 3, 2, 1} int[] buffer = new int[n]; int m = g..

기수 정렬 (Radix Sort) Comparison Sort N개 원소의 배열이 있을 때, 이를 모두 정렬하는 가짓수는 N! 따라서, Comparison Sort를 통해 생기는 트리의 말단 노드가 N! 이상의 노드 갯수를 갖기 위해서는, 2^h >= N!를 만족하는 h를 가져야 하고, 이 식을 h > O(nlogn)을 가져야 한다. (h == 트리의 높이, 즉 Comparison Sort의 시간 복잡도) 데이터를 구성하는 기본 요소 (Radix)를 이용하여 정렬을 진행하는 방식 자릿 수의 값 별로 정렬을 하기 때문에 나올 수 있는 값의 최대 사이즈는 9 정의 합병 정렬이라고도 부르며, 분할 정복 방법을 통해 구현 ※ 분할 정복 (divide and conquer) 문제를 작은 2개의 문제로 분리하고 각..

힙 정렬 (Heap Sort) 정의 완전 이진 트리를 기본으로 하는 힙(Heap) 자료구조를 기반으로 한 정렬 방식 불안정 정렬에 속한다. ※ 완전 이진트리 마지막 레벨을 제외하고 모든 레벨이 완전히 채워져 있으며, 마지막 레벨의 모든 노드는 가능한 가장 왼쪽에 있다. 퀵 정렬과 합병 정렬의 성능이 좋기 때문에 힙 정렬의 사용 빈도가 높지는 않다. 힙 자료구조의 활용 시에 알아두면 좋음 힙 정렬이 유용할 때 가장 크거나 가장 작은 값을 구할 때 : 최소 힙 or 최대 힙의 루트 값이기 때문에 한번의 힙 구성을 통해 구하는 것이 가능 최대 k만큼 떨어진 요소들을 정리할 때 : 삽입 정렬보다 더욱 개선된 결과를 얻을 수 있다. Process 1. 최대 힙을 구성 2. 현재 힙 루트는 가장 큰 값이 존재함..

병합 정렬 (Merge Sort) 정의 합병 정렬이라고도 부르며, 분할 정복 방법을 통해 구현 ※ 분할 정복 (divide and conquer) 문제를 작은 2개의 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략 빠른 정렬로 분류되며, 퀵 정렬과 함께 많이 언급되는 정렬 방식이다. 안정 정렬에 속한다. 퀵 정렬과의 차이점 퀵 정렬 : 우선 피벗을 통해 정렬 (partition) → 영역을 쪼갬(quickSort) 병합 정렬 : 영역을 쪼갤 수 있을 만큼 쪼갬(mergeSort) → 정렬(merge) Process static void mergeSort(int[] array, int left, int right) { if (left < right) { int mid =..

거품정렬 (Bubble Sort) 정의 서로 인접한 두 원소의 대소를 비교하고, 조건에 맞지 않다면 자리를 교환하며 정렬하는 알고리즘 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 거품 정렬이라고 이름 지어짐 Process 1. 1회전에 첫 번째 원소와 두 번째 원소를, 두 번째와 세 번째 원소를 ... 이런 식으로 (마지막 - 1)번째 원소와 마지막 원소를 비교하여 조건에 맞지 않으면 서로 교환한다. 2. 1회전을 수행하고 나면가장 큰 원소가 맨 뒤로 이동하므로 2회전에서는 맨 끝에 있는 원소는 정렬에서 제외되고, 2회전을 수행하고 나면 끝에서 두 번째 원소까지는 정렬에서 제회된다. 이렇게 정렬을 1회전 수행할 때마다 정렬에서 제외되는 데이터가 하나씩 늘어난다. 자바 코드 void bubbleSo..