분류 전체보기(613)
-
도커 (Docker)
도커(Docker)란?도커는 소프트웨어를 실행하는 데 필요한 모든 것을 하나의 패키지로 묶어, 다양한 환경에서 동일하게 동작하도록 보장하는 컨테이너 기반 오픈 소스 플랫폼. 이를 통해 개발, 배포, 실행 환경 간의 불일치를 해소하고, 애플리케이션 실행을 단순화하며 효율적으로 만든다.도커의 역사컨테이너 기술의 기원컨테이너 기술은 1970년대 UNIX의 chroot 명령어에서 시작되었습니다. chroot는 프로세스를 별도의 파일 시스템으로 격리하는 초기 기술로, 이후 컨테이너 기술의 기반이 되었다.2000년대 중반에는 Solaris Zones(2004), OpenVZ(2005), Linux Containers(LXC) 등이 등장하며 컨테이너 기술이 본격적으로 발전.도커의 등장과 발전도커는 2013년, 솔로몬..
2025.01.04 -
힙 정렬 (Heap Sort) (C++)
힙 정렬 (Heap Sort)힙 정렬은 힙(Heap) 자료구조를 이용한 정렬 알고리즘으로, 완전 이진 트리의 특성을 활용하여 데이터를 정렬. 힙 정렬은 선택 정렬의 확장으로 볼 수 있으며, 데이터를 효율적으로 정렬하기 위해 최대 힙(Max Heap) 또는 최소 힙(Min Heap)을 사용.동작 원리힙 생성 (Heapify):주어진 배열을 최대 힙(부모가 자식보다 크거나 같음) 또는 최소 힙(부모가 자식보다 작거나 같음)으로 변환.정렬:힙의 루트(최댓값 또는 최솟값)를 배열의 끝으로 이동하고, 힙 크기를 줄인다.줄어든 힙에 대해 다시 힙 구조를 유지하도록 정렬(Heapify).이 과정을 힙 크기가 1이 될 때까지 반복.특징시간 복잡도:최선/평균/최악: O(nlogn)힙 구성: O(n), 삭제 및 정렬: ..
2025.01.04 -
병합 정렬 (Merge Sort) (C++)
병합 정렬 (Merge Sort)병합 정렬은 분할 정복(Divide and Conquer) 알고리즘을 사용하는 정렬 기법으로, 배열을 재귀적으로 두 부분으로 나누고, 각각을 정렬한 뒤 병합(Merge)하여 정렬된 배열을 만드는 방식. 안정적이며, 정렬 성능이 O(nlogn)으로 일정한 점에서 효율적.동작 원리분할 (Divide):배열을 두 개의 하위 배열로 분할.하위 배열의 크기가 1이 될 때까지 재귀적으로 반복.정복 (Conquer):두 개의 정렬된 하위 배열을 병합하여 하나의 정렬된 배열로 만든다.병합 (Merge):병합 과정에서 두 배열을 비교하며 작은 값을 먼저 결과 배열에 추가.특징시간 복잡도:최선/평균/최악: O(nlogn) (데이터 분할 O(logn), 병합 O(n))공간 복잡도: O(..
2025.01.04 -
퀵 정렬 (Quick Sort) (C++)
퀵 정렬 (Quick Sort)퀵 정렬은 분할 정복(Divide and Conquer) 알고리즘의 한 종류로, 배열을 특정 기준(Pivot)을 중심으로 두 부분으로 나누고, 각각의 부분을 재귀적으로 정렬하는 방식. 일반적으로 매우 빠르고 효율적이기 때문에, 실무와 코딩 테스트에서 자주 사용.동작 원리배열에서 하나의 요소를 Pivot으로 선택.Partitioning:Pivot보다 작은 값들은 왼쪽에, 큰 값들은 오른쪽에 배치.Pivot을 기준으로 왼쪽과 오른쪽 서브 배열을 나눈다.왼쪽과 오른쪽 서브 배열에 대해 재귀적으로 퀵 정렬을 수행.모든 배열이 정렬될 때까지 반복.특징시간 복잡도:평균: O(nlogn)최선: O(nlogn) (Pivot이 항상 중앙값일 때)최악: O(n^2) (Pivot이 최솟값 ..
2025.01.04 -
삽입 정렬 (Insertion Sort) (C++)
삽입 정렬 (Insertion Sort)삽입 정렬은 정렬되지 않은 데이터를 하나씩 선택하여 이미 정렬된 부분에 적절한 위치를 찾아 삽입하는 방식으로 동작하는 간단한 정렬 알고리즘.동작 원리두 번째 요소부터 시작하여, 정렬된 부분의 적절한 위치에 삽입.모든 요소를 처리할 때까지 이 과정을 반복.특징시간 복잡도:최악/평균: O(n^2) (정렬되지 않은 배열의 경우)최선: O(n) (이미 정렬된 배열의 경우)공간 복잡도: O(1) (추가 메모리 사용 없음)안정적 정렬: 같은 값의 상대적인 순서가 유지.효율성: 데이터가 거의 정렬된 상태일 때 매우 효율적.예제 코드 (C++)오름차순 삽입 정렬#include #include using namespace std;void insertionSort(vector& ar..
2025.01.04 -
선택 정렬 (Selection Sort) (C++)
선택 정렬 (Selection Sort)선택 정렬은 정렬되지 않은 데이터 중에서 가장 작은 값(또는 큰 값)을 선택하여 정렬된 부분의 맨 뒤에 추가하는 방식으로 동작하는 정렬 알고리즘. 간단하지만 비효율적이기 때문에 작은 데이터셋에서 주로 사용.동작 원리배열의 첫 번째 요소부터 마지막 요소까지 순차적으로 접근.현재 범위에서 가장 작은 값(또는 큰 값)의 인덱스를 찾는다.해당 값을 현재 범위의 첫 번째 요소와 교환.위 과정을 배열 전체에 대해 반복.특징시간 복잡도:최악/평균/최선: O(n^2)공간 복잡도: O(1) (추가 메모리 사용 없음)비교 횟수: 항상 n(n−1)/2번의 비교가 발생.비교 기반 정렬: 데이터의 크기를 비교하여 정렬.비안정적 정렬: 동일한 값의 상대적인 순서가 바뀔 수 있다.예제 코드 ..
2025.01.04