동적 프로그래밍

메모이제이션(Memoization)과 타뷸레이션(Tabulation) 재귀의 문제점 재귀를 이용한 분할 정복으로 많은 문제를 해결했다. 하지만 재귀는 콜스택을 차지하는 것 외에도 성능에 크게 영향을 미치는 치명적인 단점이 있다. 바로 중복 계산이다. 피보나치 수열로 보는 재귀의 비효율성 피보나치 수열이란 다음과 같은 규칙으로 만들어진다 재귀로 구현하기…

퀵 정렬

퀵 정렬이란 병합 정렬과 같이 분할 정복 (Divide and Conquer) 알고리즘에 속하며, 재귀를 사용한다. 하지만 병합 정렬과는 다른 방식으로 동작한다 핵심 원리 병합 정렬과의 차이점 동작 과정 상세 분석 배열 [5, 3, 7, 2, 6, 4, 9, 1, 8]을 오름차순으로…

병합 정렬

분할 정복 (Divide and Conquer) 해결하기 힘든 문제가 있다면 한 번에 해결하려 하지 말고, 해결하기 쉬울 정도로 문제를 쪼갠 다음 하나씩 해결하라 이것이 바로 분할 정복(Divide and Conquer) 전략이다. 병합 정렬은 이 전략을 완벽하게 구현한 알고리즘으로 지금까지 알아본 O(n²) 정렬들과는…

삽입 정렬

삽입 정렬은 배열을 정렬된 영역과 정렬되지 않은 영역으로 나누고, 정렬되지 않은 영역에서 원소를 하나씩 꺼내어 정렬된 영역의 적절한 위치에 삽입하는 알고리즘이다. 마치 카드 게임에서 손에 든 카드를 정렬하는 방식과 유사하다. 구현이 직관적이지만 성능은 O(n²)으로 비효율적이다. 핵심 원리 동작 과정 상세…

선택 정렬

선택 정렬은 정렬되지 않은 영역에서 가장 작은 값을 찾아 정렬된 영역의 맨 뒤로 보내는 알고리즘이다. 매 단계마다 최솟값을 선택(Selection)한다고 해서 선택 정렬이라는 이름이 붙었다. 구현이 직관적이지만 성능은 O(n²)으로 비효율적이다 핵심 원리 선택 정렬은 다음 과정을 반복한다 동작 과정 상세 분석…

버블 정렬

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

재귀 – 하노이탑

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

재귀적 사고

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

재귀 함수 (Recursive Function)

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

SSL/TLS와 암호 기술의 이해

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