user

user

버블 정렬

버블 정렬은 가장 직관적이고 이해하기 쉬운 정렬 알고리즘 중 하나이다. 인접한 두 원소를 비교하여 순서가 잘못되어 있으면 위치를 교환하는 방식으로 동작한다. 구현이 간단하지만 성능은 O(n²)으로 효율적이지 않다. 동작 원리 배열 [4, 2, 3, 1]을 오름차순으로 정렬하는 과정을 살펴보자 1단계: 첫…

재귀 – 하노이탑

하노이탑의 탄생 1883년, 프랑스 수학자 에두아르 뤼카(Édouard Lucas)가 흥미로운 퍼즐 하나를 세상에 공개했다. 세 개의 기둥과 크기가 서로 다른 원반들로 이루어진 이 게임은, 가장 큰 원반이 맨 아래 있고 위로 갈수록 작은 원반이 쌓여있는 구조이다. 게임의 규칙 하나의 기둥에 있는…

재귀적 사고

재귀를 배우고 나면 그 개념 자체는 이해할 수 있지만, 실제로 문제를 재귀적으로 풀어내는 것은 쉽지 않은 일이다. 이는 우리가 일상생활에서 재귀적으로 사고할 일이 거의 없기 때문이다. 하지만 재귀에도 몇 가지 주요 패턴이 존재하며, 이를 이해하고 연습한다면 어떤 문제가 재귀에 적합한지…

재귀 함수 (Recursive Function)

프로그래밍의 핵심 개념 중 하나인 재귀 함수(Recursive Function)에 파고들어보자. 재귀는 단순히 어려운 개념이 아니라, 특정 유형의 문제를 우아하고 효율적으로 해결해준다. 재귀의 기본 개념: 자기 참조 재귀는 어떤 것을 정의할 때 자기 자신을 참조하는 것을 의미한다. 프로그래밍에서는 함수를 정의할 때 자기…

SSL/TLS와 암호 기술의 이해

인터넷 환경에서 대칭키 암호화 방식의 한계 인터넷이 우리 삶의 필수적인 부분이 되면서, 온라인 상의 정보 보안은 그 어느 때보다 중요했다. 특히, 민감한 정보를 안전하게 주고받기 위한 암호 기술의 역할은 막대하다. 가장 기본적인 암호화 방식 중 하나인 대칭키 암호화는 하나의 키로…

셋 (Set)

Set은 데이터의 중복을 허용하지 않는 자료구조이다. 개발을 하다가 중복되지 않는 값을 저장하고 싶다면 Set을 이용하면 된다. Set은 해시 테이블을 이용하기 때문에 비교적 쉽게 구현할 수 있다. 해시 테이블을 사용한다고 해서 HashSet이라고도 불리기도 한다 핵심 특징 HashSet의 추상 자료형 HashSet 클래스…

해시 테이블 (hashTable)

해시 테이블은 여러 프로그래밍 언어에서 해시(Hash), 맵(Map), 해시맵(HashMap), 딕셔너리(Dictionary) 등 다양한 이름으로 불린다. 이름에서 알 수 있듯이 해시(Hash)와 테이블(Table)이라는 두 가지 핵심 개념이 결합된 자료구조이다. 해시 테이블은 데이터 검색, 삽입, 삭제에 있어서 좋은 성능을 자랑하며, 많은 프로그래밍 언어의 내부 자료구조로…

연결 리스트 – 양방향

단방향 연결 리스트(Singly Linked List)는 각 노드가 다음 노드(next)만을 참조하기 때문에, 이전 노드로 역방향 탐색이 불가능하다는 한계가 있다. 이를 해결하기 위해 고안된 구조가 이중 연결 리스트(Doubly Linked List)이다. 이중 연결 리스트는 각 노드가 이전 노드(prev)와 다음 노드(next)의 참조를 모두 가지며,…

디지털 서명

서명의 필요성 우리는 일상에서 중요한 서류(계약서 등)에 도장을 찍거나 서명한다. 이는 계약 내용이 유효함을 약속하는 행위이다. 그런데 만약 누군가 도장을 위조해서 나를 사칭한다면? 이는 명백한 사기 행위이다. 따라서 다음과 같은 보안 요구사항이 필요하다 인터넷 환경에서도 이러한 보안이 반드시 필요하기 때문에…

덱 (Deque)

Deque(덱)은 스택(Stack)과 큐(Queue)의 장점을 모두 결합한 유연한 자료구조로 (Deque: Double-Ended Queue) 덱은 이름 그대로 ‘양방향’에서 삽입과 삭제가 가능한 자료구조이다. 스택인 “Last In First Out (LIFO)” 방식으로 한쪽(보통 top)에서만 데이터를 넣고 뺄 수 있다. 큐는 “First In First Out (FIFO)” 방식으로…