데이터베이스를 다루다 보면 반드시 접하게 되는 두 가지 언어가 있습니다. 바로 DDL(Data Definition Language)과 DML(Data Manipulation Language)입니다. 이 두 언어는 이름은 비슷하지만 역할과 사용 목적이 완전히 다릅니다. 이 글에서는 DDL과 DML의 개념을 살펴보고, 두 언어의 핵심적인 차이점을 비교해 보겠습니다.DDL(데이터 정의어)이란?DDL은 Data Definition Language의 약자로, 한국어로는 데이터 정의어라고 부릅니다. DDL은 데이터 자체가 아니라 데이터가 저장
이 섹션에서는 자주 접하게 되는 다양한 수학적 문제들을 컴퓨터 알고리즘을 활용해 해결하는 방법을 살펴봅니다. 미분방정식의 수치 해석, 정적분 계산, 그리고 그 외 복잡한 수학 문제들을 알고리즘으로 어떻게 풀어낼 수 있는지 단계별로 학습할 수 있습니다. 이 섹션에서 다루는 주제 중위 표기법(Infix)을 후위 표기법(Postfix)으로 변환하기 중위 표기법(Infix)을 전위 표기법(Prefix)으로 변환하기 후위 표기법(Postfix) 수식 계산하기 비선형 방정식의 해 구하기 — 할선법(Secant Method) 정적분 계산 —
점근 분석(Asymptotic Analysis)이란?점근 분석(asymptotic analysis)은 입력 크기를 기준으로 알고리즘의 성능을 가늠할 수 있게 해주는 핵심 기법입니다. 여기서 중요한 점은 실행 시간을 정확히 계산하는 것이 아니라, 실행 시간과 입력 크기 사이의 관계를 찾는 것입니다. 즉, 입력 크기가 커질 때 실행 시간이 어떤 패턴으로 변화하는지에 주목해야 합니다.공간 복잡도(space complexity) 역시 같은 원리로 접근합니다. 이 경우의 목표는 알고리즘을 완료하기 위해 메인 메모리가 얼마나 사용되는지를 나타
점근 표기법(Asymptotic Notations)이란?점근 표기법은 알고리즘의 시간 복잡도와 공간 복잡도를 점근적 분석(asymptotic analysis)으로 나타내기 위해 사용되는 수학적 도구입니다. 입력 크기 n이 무한히 커질 때 알고리즘의 성능이 어떻게 변화하는지를 간결하게 표현할 수 있어, 알고리즘의 효율성을 비교하고 평가하는 데 필수적으로 활용됩니다.대표적인 점근 표기법은 다음과 같습니다.빅오(Big-O) 표기법 — O()리틀 오(little-o) 표기법 — o()빅 오메가(Big-Omega) 표기법 — Ω()리틀 오메
점근 표기법(Asymptotic Notation)이란?점근 표기법은 알고리즘의 성능을 점근적 분석(asymptotic analysis) 관점에서 평가하기 위해 사용되는 수학적 도구입니다. 입력 크기(n)가 충분히 커질 때 알고리즘의 실행 시간이나 메모리 사용량이 어떻게 증가하는지를 간결하게 표현할 수 있습니다.점근 표기법에는 일반적으로 다음 세 가지가 널리 사용됩니다.빅오 표기법 (Big-O, O) — 최악의 경우를 기준으로 하는 상한(Upper Bound)빅 오메가 표기법 (Big-Omega, Ω) — 최선의 경우를 기준으로 하는
점근 표기법(Asymptotic Notations)이란? 점근 표기법은 알고리즘의 복잡도(complexity)를 점근적으로 분석하기 위해 사용되는 수학적 도구입니다. 입력 크기 n이 커질 때 알고리즘의 실행 시간이나 자원 사용량이 어떻게 증가하는지를 간결하게 표현할 수 있어, 알고리즘의 성능을 비교하고 평가하는 데 필수적인 개념입니다. 일반적으로 가장 널리 사용되는 점근 표기법에는 세 가지가 있습니다. 빅 오(Big-O, O) : 상한(Upper Bound) 표기 빅 오메가(Big-Omega, Ω) : 하한(Lower Bound
소(little-o) 표기법이란?알고리즘의 점근적 분석(asymptotic analysis)에서는 빅오(Big-O), 빅오메가(Big-Omega), 빅세타(Big-Theta) 표기법 외에도 몇 가지 보조 표기법이 사용됩니다. 그중 하나가 바로 소(little-o) 표기법입니다.소 표기법은 타이트(tight)해질 수 없는 상한, 즉 엄격한 의미의 느슨한 상한(loose upper bound)을 나타낼 때 사용됩니다. 빅오 표기법이 이하(≤)의 개념이라면, 소 표기법은 미만(<)에 해당하는 더 강한 조건이라고 이해하면 쉽습니다.수학적
상각 분석(Amortized Analysis)이란?상각 분석은 일련의 연산 전체를 놓고 평균적인 비용을 계산하는 알고리즘 분석 기법입니다. 어떤 자료구조는 대부분의 연산이 매우 빠르게 수행되지만, 아주 가끔 발생하는 특정 연산만 유난히 느릴 수 있습니다. 이럴 때 최악의 경우만 보는 일반적인 시간 복잡도 분석보다, 여러 번의 연산에 걸쳐 비용을 나누어 안분하는 상각 분석이 더 현실적인 성능을 보여줍니다.대표적으로 해시 테이블(Hash Table), 서로소 집합(Disjoint Set), 동적 배열(Dynamic Array) 등의 자
그래프란 무엇인가?그래프(Graph)는 대표적인 비선형(non-linear) 자료구조입니다. 그래프는 데이터를 노드(정점)로 표현하고, 데이터 간의 관계를 간선(Edge)으로 나타냅니다. 하나의 그래프 G는 두 가지 구성 요소를 가지는데, 바로 정점(Vertex)과 간선(Edge)입니다. 정점은 집합 V로, 간선은 집합 E로 표현되며, 따라서 그래프는 일반적으로 G(V, E)와 같이 표기합니다.아래 예시를 통해 그래프의 개념을 좀 더 구체적으로 살펴보겠습니다.위 그래프에는 5개의 정점과 5개의 간선이 존재하며, 모든 간선은 방향성을
깊이 우선 탐색(Depth First Search, DFS)은 그래프를 순회하는 대표적인 알고리즘입니다. 시작 정점이 하나 주어지면, 인접한 정점을 발견하는 즉시 그 정점으로 먼저 이동한 뒤 같은 방식으로 계속해서 탐색을 진행합니다.DFS는 갈 수 있는 곳까지 최대한 깊이 들어간 후, 더 이상 진행할 수 없게 되면 이전 정점들로 되돌아가는 백트래킹(backtracking) 과정을 통해 아직 탐색하지 않은 새로운 경로를 찾아냅니다.DFS를 반복문(iterative) 방식으로 구현하려면 스택(stack) 자료구조가 반드시 필요합니다.
너비 우선 탐색(BFS)이란?너비 우선 탐색(Breadth First Search, BFS)은 주어진 그래프의 모든 노드를 빠짐없이 방문하기 위해 사용되는 대표적인 그래프 순회(traversal) 알고리즘입니다. BFS는 시작 노드를 하나 선택한 뒤, 해당 노드에 인접한 모든 노드를 차례대로 방문합니다. 인접한 정점들을 모두 처리하고 나면 다음 정점으로 이동하여 같은 방식으로 그 정점의 인접 정점들을 다시 탐색합니다.이러한 특성 덕분에 BFS는 시작점에서 가까운 노드부터 멀리 있는 노드 순서로 탐색하게 되며, 최단 경로 문제나 레벨
분할 정복(Divide and Conquer)은 알고리즘 설계 기법 중 하나로, 복잡한 문제를 작은 단위로 나누어 해결하는 강력한 패러다임입니다. 병합 정렬(Merge Sort), 퀵 정렬(Quick Sort), 이진 탐색(Binary Search) 등 우리가 자주 사용하는 알고리즘 대부분이 이 기법을 기반으로 동작합니다.분할 정복의 3단계 구조분할 정복 알고리즘은 크게 다음 세 가지 단계로 구성됩니다.1. 분할 (Divide)주어진 문제를 같은 유형의 더 작은 하위 문제(sub-problem)들로 나누는 단계입니다. 문제의 크기를
역추적(Backtracking) 알고리즘이란?역추적(백트래킹)은 문제를 단계적으로 해결해 나가는 대표적인 알고리즘 기법입니다. 이 기법은 재귀(Recursion) 방식을 활용하여 가능한 모든 해답 후보를 체계적으로 탐색하며, 진행 중에 해당 경로가 정답으로 이어질 수 없다고 판단되면 이전 단계로 되돌아가 다른 경로를 시도합니다.쉽게 말해, 백트래킹은 최적화 문제나 조합 문제에서 가능한 모든 조합을 탐색하되, 유망하지 않은 경우는 조기에 배제함으로써 탐색 효율을 높이는 방법이라 할 수 있습니다.백트래킹의 핵심 동작 원리백트래킹은 다음
카테고리에 속하지 않은 다양한 알고리즘 문제지금까지 우리는 여러 섹션에서 분류된 다양한 문제들을 살펴보았습니다. 하지만 특정 주제나 카테고리에 깔끔하게 속하지 않는 문제들도 존재합니다. 이번 섹션에서는 이렇게 분류되지 않은 문제들을 하나씩 짚어보겠습니다.이 문제들은 겉보기에는 산발적으로 보일 수 있지만, 코딩 테스트와 기술 면접에서 실제로 자주 등장하는 핵심 주제들입니다. 이해하기 쉽도록 아래에서 주제별로 묶어 정리했습니다.이 섹션에서 다룰 내용수학 및 숫자 관련 문제n진수(base-n) 숫자 덧셈바빌로니아 방법(Babylonian
패턴 검색 알고리즘이란?패턴 검색(Pattern Searching) 알고리즘은 하나의 긴 문자열(텍스트) 안에서 특정 패턴이나 부분 문자열을 찾아내는 데 사용되는 알고리즘입니다. 이러한 알고리즘은 다양한 종류가 있으며, 설계의 핵심 목표는 시간 복잡도를 줄여 검색 성능을 극대화하는 것입니다.전통적인 단순 비교 방식은 텍스트가 길어질수록 많은 시간이 소요될 수 있습니다. 따라서 대용량 텍스트에서도 빠르게 동작하도록 고안된 여러 최적화된 알고리즘이 등장했습니다.이 섹션에서 다루는 알고리즘아래에서는 패턴 매칭 성능을 향상시키는 대표적인
검색 알고리즘(Searching Algorithm)은 데이터 집합에서 하나 이상의 원소를 찾거나 탐색하기 위해 사용되는 알고리즘입니다. 배열, 리스트, 트리 등 특정 자료구조에 저장된 데이터 속에서 원하는 값을 효율적으로 찾아내는 것이 핵심 목적입니다. 검색 방식은 크게 순차 검색과 비순차 검색으로 나눌 수 있습니다. 데이터가 정렬되어 있지 않고 무작위로 배치되어 있다면 처음부터 끝까지 차례대로 확인하는 순차 검색을 사용해야 합니다. 반면 데이터가 정렬되어 있거나 특정 구조를 가지고 있다면, 이진 탐색처럼 탐색 범위를 단계적으로 줄
정렬(Sorting)이란 데이터를 특정한 형식이나 규칙에 따라 체계적으로 배열하는 과정을 의미합니다. 정렬 알고리즘은 이러한 데이터를 특정 순서로 배치하는 구체적인 방법을 정의하며, 가장 널리 사용되는 순서는 수치 순서(numerical order)와 사전 순서(lexicographical order)입니다.정렬이 중요한 이유는 데이터를 정렬된 상태로 저장해 두면 탐색(searching) 작업을 매우 효율적으로 최적화할 수 있기 때문입니다. 예를 들어, 정렬된 배열에서는 이진 탐색(Binary Search)처럼 빠른 검색 기법을 적
탐욕 알고리즘(Greedy Algorithm)은 주어진 문제에 대해 최적의 해답을 얻기 위해 고안된 알고리즘 기법입니다. 이 방식에서는 해답 영역(solution domain) 내에서 매 순간 판단을 내리며, 이름 그대로 탐욕스럽게 당장 눈앞에 보이는 가장 좋아 보이는 선택지를 우선적으로 취합니다. 탐욕 알고리즘은 각 단계에서 지역적 최적해(local optimum)를 찾아 나가며, 이러한 선택들이 모여 결과적으로 전역적 최적해(global optimum)에 도달하기도 합니다. 하지만 모든 경우에 그런 것은 아니며, 일반적으로 탐욕
동적 계획법(Dynamic Programming)이란? 동적 계획법(다이내믹 프로그래밍, Dynamic Programming)은 다양한 알고리즘 설계 기법 중 하나로, 복잡한 문제를 여러 개의 작은 부분 문제(sub-problem)로 나누어 해결하는 방식입니다. 핵심 아이디어는 한 번 계산한 부분 문제의 결과를 저장해 두었다가, 이후 동일한 부분 문제가 다시 필요할 때 재계산하지 않고 저장된 값을 그대로 활용하는 것입니다. 이를 통해 불필요한 중복 연산을 제거하고 전체 계산 시간을 크게 단축할 수 있습니다. 예를 들어 피보나치 수열
그래프(Graph)란 무엇인가?그래프는 유한한 개수의 노드(정점)와 이 노드들의 쌍을 연결하는 간선의 집합으로 구성되는 대표적인 비선형 자료구조입니다. 트리나 배열과 달리 데이터가 계층적 또는 순차적으로 배치되지 않고, 임의의 형태로 서로 연결될 수 있다는 점이 특징입니다.그래프는 실생활의 다양한 문제를 모델링하고 해결하는 데 폭넓게 활용됩니다. 예를 들어 소셜 네트워크에서 사람들 간의 친구 관계, 지도 애플리케이션에서 도시 간 도로 연결, 통신망에서 라우터 간의 연결 상태 등을 표현할 때 그래프가 사용됩니다.이 섹션에서 다루는 주