링크드리스트 문제 해결 전략 및 예제 코드
링크드리스트 문제를 해결할 때 가장 먼저 기억해야 할 점은 가상의 헤드 노드를 설정하는 것입니다.
LeetCode 24: 두 노드씩 교환하기
주어진 링크드리스트에서 두 개의 노드씩 교환하는 문제입니다. 이때 중요한 것은 적절한 위치의 노드를 참조하는 것입니다. 특히 두 개의 노드를 교환하기 전의 노드를 기억해야 합니다.
class Solution {
public ListNode swapPai ...
9월 2일 03:46에 게시됨
Java의 순차 리스트 구현
List 인터페이스
1.1 List 소개
Java의 컬렉션 프레임워크에서 List는 Collection을 상속받는 인터페이스입니다.
Iterable <-- Collection <-- List.
Collection도 인터페이스이며, 이는 후속 컨테이너에서 사용되는 일반적인 메서드를 정의합니다.
Iterable은 요소를 개별적으로 순회할 수 있는 클래스를 나타내는 또 다른 인터페이스입니다.
데이터 구조 관점에 ...
8월 29일 21:29에 게시됨
C++로 동적 배열 라이브러리 구현하기
1. 동적 배열의 특징일반 정적 배열은 선언 시점에 크기가 고정되지만, 동적 배열은 실행 중에 필요한 만큼 크기를 늘리거나 줄일 수 있다. 이를 직접 라이브러리 형태로 구현하면 메모리 관리와 사용자 인터페이스를 분리할 수 있어, 재사용성과 안정성이 아진다.2. 헤더 설계다음은 라이브러리에서 제공하는 모든 기능을 선언한 헤더 파일이다. 실제 struct 정의는 구현 ...
8월 17일 19:06에 게시됨
Java로 구현하는 핵심 정렬 알고리즘의 이해와 활용
1. 삽입 정렬 (Insertion Sort)
삽입 정렬은 현재 위치의 요소를 이미 정렬된 앞부분의 적절한 위치에 찾아 넣는 방식입니다. 구현이 간단하며 데이터가 거의 정렬된 상태에서는 매우 효율적입니다. 시간 복잡도는 평균 $O(n^2)$이며, 안정 정렬(Stable Sort)에 속합니다.
public void insertionSort(int[] data) {
int len = data.length;
for (int i = 1; i < ...
8월 16일 16:41에 게시됨
이진 검색 트리(Binary Search Tree)의 구조와 Java를 활용한 구현
이진 검색 트리의 기본 개념
이진 검색 트리(Binary Search Tree, BST)는 데이터의 빠른 탐색을 위해 설계된 계층형 자료구조입니다. 원본 글에서는 이를 'B-tree'로 지칭했으나, 설명된 특성(최대 2개의 자식 노드, 좌우 크기 규칙)은 정확히 이진 검색 트리의 정의에 부합합니다. BST는 다음과 같은 핵심적인 제약 조건을 가집니다.
각 노드는 최대 두 개의 자식(Left, ...
8월 10일 20:00에 게시됨
C++ 컨테이너 어댑터: stack, queue 및 priority_queue의 이해와 구현
1. stack의 특징과 활용
C++ STL의 stack은 LIFO(Last-In-First-Out, 후입선출) 원칙을 따르는 컨테이너 어댑터입니다. 데이터의 삽입과 삭제가 한쪽 끝(Top)에서만 이루어지는 구조를 가집니다.
1.1 stack의 주요 인터페이스
함수
설명
push(val)
스택의 맨 위에 데이터를 추가
pop()
스택의 ...
8월 5일 00:44에 게시됨
배열 내 132 패턴 존재 여부를 판별하는 효율적인 알고리즘
132 패턴 문제의 이해
배열 nums가 주어졌을 때, i < j < k 인덱스 순서를 만족하면서 nums[i] < nums[k] < nums[j] 관계를 가지는 패턴이 존재하는지 확인하는 문제입니다. 즉, 첫 번째 숫자가 가장 작고, 두 번째 숫자가 가장 크며, 세 번째 숫자가 그 중간 값을 가지는 부분 수열을 찾아야 합니다.
1. 브루트 포스(Brute Force) 방식
가장 직관적인 방법은 ...
7월 26일 18:57에 게시됨
C++ 세그먼트 트리 구현 및 지연 전파(Lazy Propagation) 완벽 가이드
세그먼트 트리(Segment Tree)는 펜윅 트리(Fenwick Tree)와 유사하게 구간 합을 구하는 데 주로 사용되지만, 이 외에도 구간 최소/최대값 탐색, 구간 색칠 등 다양한 구간 연산을 효율적으로 처리할 수 있는 강력한 자료구조입니다. 본 가이드에서는 C++를 사용하여 세그먼트 트리의 기본 구현부터 지연 전파(Lazy Propagation)를 활용한 고급 기법까지 단계별로 다룹니다. ...
7월 23일 20:44에 게시됨
C++ 환경에서의 효율적 데이터 탐색과 정렬 전략 분석
1. 정렬된 시퀀스 기반 검색 메커니즘
데이터가 순차적으로 정리되어 있는 배열이나 벡터 내 특정 값을 신속하게 locating 하는 것은 알고리즘 설계의 핵심 요소다. 여기서는 대표적인 비선형 탐색 기법 세 가지를 다룬다.
1.1 이분 탐색 (Binary Search)
범위를 반으로 나누어 목표값을 축소하는 고전적인 방법이다. 선형 검색의 O(n) 한계를 극복하고 로그 시간인 O(log ...
7월 17일 06:51에 게시됨
자바 ArrayList 핵심 로직 직접 구현하기
자바 컬렉션 프레임워크에서 가장 널리 사용되는 ArrayList는 내부적으로 동적 배열을 기반으로 동작합니다. 이번 글에서는 ArrayList의 핵심 동작 원리를 깊이 이해하기 위해, 최소한의 코드로 커스텀 리스트를 직접 구현해 보겠습니다.
기본 구조 및 변수 정의
먼저 SimpleList라는 제네릭 클래스를 정의합니다. ArrayList와 마찬가지로 데이터를 저장하기 위해 Object ...
7월 15일 16:35에 게시됨