삽입 정렬
삽입 정렬은 배열을 정렬된 영역과 정렬되지 않은 영역으로 나누고, 정렬되지 않은 영역에서 원소를 하나씩 꺼내어 정렬된 영역의 적절한 위치에 삽입하는 알고리즘이다. 마치 카드 게임에서 손에 든 카드를 정렬하는 방식과 유사하다. 구현이 직관적이지만 성능은 O(n²)으로 비효율적이다. 핵심 원리 동작 과정 상세…
삽입 정렬은 배열을 정렬된 영역과 정렬되지 않은 영역으로 나누고, 정렬되지 않은 영역에서 원소를 하나씩 꺼내어 정렬된 영역의 적절한 위치에 삽입하는 알고리즘이다. 마치 카드 게임에서 손에 든 카드를 정렬하는 방식과 유사하다. 구현이 직관적이지만 성능은 O(n²)으로 비효율적이다. 핵심 원리 동작 과정 상세…
선택 정렬은 정렬되지 않은 영역에서 가장 작은 값을 찾아 정렬된 영역의 맨 뒤로 보내는 알고리즘이다. 매 단계마다 최솟값을 선택(Selection)한다고 해서 선택 정렬이라는 이름이 붙었다. 구현이 직관적이지만 성능은 O(n²)으로 비효율적이다 핵심 원리 선택 정렬은 다음 과정을 반복한다 동작 과정 상세 분석…
버블 정렬은 가장 직관적이고 이해하기 쉬운 정렬 알고리즘 중 하나이다. 인접한 두 원소를 비교하여 순서가 잘못되어 있으면 위치를 교환하는 방식으로 동작한다. 구현이 간단하지만 성능은 O(n²)으로 효율적이지 않다. 동작 원리 배열 [4, 2, 3, 1]을 오름차순으로 정렬하는 과정을 살펴보자 1단계: 첫…
하노이탑의 탄생 1883년, 프랑스 수학자 에두아르 뤼카(Édouard Lucas)가 흥미로운 퍼즐 하나를 세상에 공개했다. 세 개의 기둥과 크기가 서로 다른 원반들로 이루어진 이 게임은, 가장 큰 원반이 맨 아래 있고 위로 갈수록 작은 원반이 쌓여있는 구조이다. 게임의 규칙 하나의 기둥에 있는…
재귀를 배우고 나면 그 개념 자체는 이해할 수 있지만, 실제로 문제를 재귀적으로 풀어내는 것은 쉽지 않은 일이다. 이는 우리가 일상생활에서 재귀적으로 사고할 일이 거의 없기 때문이다. 하지만 재귀에도 몇 가지 주요 패턴이 존재하며, 이를 이해하고 연습한다면 어떤 문제가 재귀에 적합한지…
프로그래밍의 핵심 개념 중 하나인 재귀 함수(Recursive Function)에 파고들어보자. 재귀는 단순히 어려운 개념이 아니라, 특정 유형의 문제를 우아하고 효율적으로 해결해준다. 재귀의 기본 개념: 자기 참조 재귀는 어떤 것을 정의할 때 자기 자신을 참조하는 것을 의미한다. 프로그래밍에서는 함수를 정의할 때 자기…
인터넷 환경에서 대칭키 암호화 방식의 한계 인터넷이 우리 삶의 필수적인 부분이 되면서, 온라인 상의 정보 보안은 그 어느 때보다 중요했다. 특히, 민감한 정보를 안전하게 주고받기 위한 암호 기술의 역할은 막대하다. 가장 기본적인 암호화 방식 중 하나인 대칭키 암호화는 하나의 키로…
Set은 데이터의 중복을 허용하지 않는 자료구조이다. 개발을 하다가 중복되지 않는 값을 저장하고 싶다면 Set을 이용하면 된다. Set은 해시 테이블을 이용하기 때문에 비교적 쉽게 구현할 수 있다. 해시 테이블을 사용한다고 해서 HashSet이라고도 불리기도 한다 핵심 특징 HashSet의 추상 자료형 HashSet 클래스…
해시 테이블은 여러 프로그래밍 언어에서 해시(Hash), 맵(Map), 해시맵(HashMap), 딕셔너리(Dictionary) 등 다양한 이름으로 불린다. 이름에서 알 수 있듯이 해시(Hash)와 테이블(Table)이라는 두 가지 핵심 개념이 결합된 자료구조이다. 해시 테이블은 데이터 검색, 삽입, 삭제에 있어서 좋은 성능을 자랑하며, 많은 프로그래밍 언어의 내부 자료구조로…
단방향 연결 리스트(Singly Linked List)는 각 노드가 다음 노드(next)만을 참조하기 때문에, 이전 노드로 역방향 탐색이 불가능하다는 한계가 있다. 이를 해결하기 위해 고안된 구조가 이중 연결 리스트(Doubly Linked List)이다. 이중 연결 리스트는 각 노드가 이전 노드(prev)와 다음 노드(next)의 참조를 모두 가지며,…