
해시는 데이터를 빠르게 찾기 위해 만들어진 자료구조이자 개념이다. 핵심 아이디어는 간단하다. 값을 그대로 저장하거나 그대로 비교하는 대신, 특정 규칙을 이용해 ‘숫자 형태의 고유한 값(해시 값)’으로 바꿔 저장하고, 그 숫자를 기반으로 데이터를 바로 찾아가는 방식이다.

큐는 데이터를 처리할 때 들어온 순서 그대로 다뤄야 하는 상황에서 사용하는 자료구조다. 이 구조의 가장 큰 특징은 먼저 들어온 값이 먼저 나가는 FIFO(First In, First Out) 방식이라는 점이다. 우리가 은행이나 카페에서 줄을 서는 모습과 같다. 먼저 줄

스택은 데이터를 저장하는 방식 중 하나로, 가장 마지막에 넣은 데이터를 가장 먼저 꺼내는 구조(LIFO: Last In, First Out)를 갖는다. 일상에서 가장 비슷한 예를 들자면, 책을 한 권씩 쌓아 올린 모습과 같다. 위에 올린 책이 가장 먼저 손에 잡히듯,

병합 정렬은 배열을 효율적으로 정렬하기 위해 사용되는 대표적인 분할 정복(divide and conquer) 알고리즘이다. 큰 문제를 한 번에 해결하려 하지 않고, 작은 문제로 계속 쪼갠 뒤 정렬하고 다시 합치는 방식으로 동작한다. 병합 정렬이 강력한 이유는 이 구조 덕분에 어떤 입력이 들어와도 시간 복잡도가 일정하게 유지된다는 점이다. 정렬 과정은 ...

정렬 알고리즘을 처음 공부할 때 가장 자주 등장하는 두 가지 방식이 있다. 바로 선택 정렬과 삽입 정렬이다. 둘 다 구조가 단순하고 구현이 쉬워서 입문 단계에서 자주 사용되지만, 내부에서 어떻게 동작하는지 조금만 이해해두면 정렬 알고리즘의 기본적인 사고방식이 자연스럽게

재귀 함수(recursion)는 어떤 문제를 해결할 때 그 문제와 동일한 구조를 가진 더 작은 문제로 쪼갠 뒤, 그 작은 문제를 다시 자기 자신에게 맡기는 방식이다. 이 개념을 처음 들으면 어렵게 느껴지지만, 사실 상자 속에 상자가 계속 들어 있는 구조처럼, 큰 문제

이진 탐색은 정렬된 데이터에서 원하는 값을 빠르게 찾기 위해 사용되는 대표적인 탐색 알고리즘이다. 업다운 게임을 떠올리면 동작 원리를 쉽게 이해할 수 있다. 숫자가 1부터 100까지 있다고 가정하고, 제한된 횟수 안에 정답을 맞혀야 한다면 가장 먼저 시도해야 할 숫자는

프로그래밍에서는 데이터를 어떻게 저장하고 다루느냐에 따라 선택해야 할 자료구조가 달라진다. 특히 배열과 링크드 리스트는 기본 구조는 비슷해 보이지만 내부 동작 방식은 크게 다르다.이 글에서는 어레이(Array)와 링크드 리스트(Linked List)의 차이를 직관적으로

점근 표기법(Asymptotic Notation)은 알고리즘의 성능을 수학적으로 표현하는 방법이다. 우리가 어떤 코드를 실행할 때 실제 걸리는 시간은 컴퓨터의 사양, 언어, 환경 등에 따라 달라질 수 있다. 그렇기 때문에 절대적인 “실행 시간” 대신, 입력 크기가 커질

공간 복잡도(Space Complexity)는 알고리즘이 문제를 해결하는 과정에서 얼마나 많은 메모리 공간을 사용하는가를 분석하는 개념이다. 시간 복잡도가 “얼마나 오래 걸리는가”를 의미한다면, 공간 복잡도는 “얼마나 많은 공간을 차지하는가”를 뜻한다. 쉽게 말해, 입

시간 복잡도(Time Complexity)는 알고리즘의 효율성을 판단할 때 가장 기본이 되는 개념이다. 이는 입력값의 크기(N)가 커질 때 프로그램이 문제를 해결하기 위해 수행해야 하는 연산의 양을 의미한다. 단순히 코드가 빨리 실행되는지 느린지를 말하는 게 아니라, 입력이 커질수록 연산 횟수가 얼마나 늘어나는가를 수학적으로 표현하는 것이다. 예를 들어...