LeetCode 코딩 문제 해결 중 발생하는 흔한 오류와 해결 방법

서론 보통 LeetCode 문제를 풀 때 저는 연습장이나 로컬 에디터를 사용하지 않고 문제 페이지의 코드 편집기에서 직접 코드를 작성합니다. 이러한 방식으로 문제를 푸는 경우 유료 기능을 사용하지 않으면 예상치 못한 버그가 발생할 수 있으며, 이를 찾는 데 많은 시간이 소요됩니다. 이 글에서는 과거에 경험한 문제들을 정리하고자 합니다. 사례 1 오랜 시간 동안 문제 ...

7월 28일 19:44에 게시됨

C언어를 이용한 큐(Queue) 자료구조의 구현과 이해

큐(Queue)의 핵심 개념 큐는 선입선출(FIFO, First In First Out) 원칙을 따르는 선형 자료구조입니다. 가장 먼저 삽입된 데이터가 가장 먼저 제거되는 구조로, 일상생활의 대기 줄과 유사한 메커니즘을 가집니다. 운영체제의 프로세스 스케줄링, 네트워크 패킷 처리, 너비 우선 탐색(BFS) 등 다양한 알고리즘과 시스템 설계에서 필수적으로 사용됩니다. 주요 용어 및 동 ...

7월 27일 17:08에 게시됨

펜윅 트리를 활용한 역쌍 계산 알고리즘

역쌍(Inversion Pair)이란 주어진 양의 정수 배열에서 인덱스 i가 j보다 작으면서 값은 a[i]가 a[j]보다 큰 경우, 즉 i < j && a[i] > a[j]를 만족하는有序对(순서쌍)를 의미한다. 这类 문제를 풀 때 가장 먼저 떠올리는 방법은 병합 정렬을 이용하는 것이다. 그러나 今回は 펜윅 트리(Fenwick Tree) 또는 BIT(Binary Indexed Tree)라는 자료구조를 활용하여 ...

7월 25일 03:34에 게시됨

C++ 스택과 큐 관련 알고리즘 문제 풀이

문제 1: 최소값 스택push, pop, top 연산을 지원하면서도 상수 시간 내에 최소 요소를 검색할 수 있는 스택을 설계하세요.MinStack 클래스를 구현해야 합니다:MinStack(): 스택 객체 초기화void push(int val): 요소를 스택에 삽입void pop(): 스택 상단 요소 삭제int top(): 스택 상단 요소 반환int getMin(): 스택의 최소 요소 반환, 시간 복잡도 O(1)풀이思路두 개의 스 ...

7월 18일 02:27에 게시됨

Union-Find 자료구조

Union-Find란 이름에서도 알 수 있듯, 서로소 집합 관리에 특화된 데이터 구조입니다. 이 구조는 특정 원소가 속해 있는 집합을 관리하며, 두 집합의 병합(Union)과 특정 원소가 속한 집합의 대표를 찾는 Find 연산을 지원합니다. 이 구조는림수 (Forest)로 표현할 수 있습니다. 각각의 트리가 하나의 집합을 대표하며, 트리의 모든 노드는 그 집합에 속한 원소를 나타냅니 ...

7월 15일 23:56에 게시됨

트리 체인 분할을 활용한 경로 및 서브트리 쿼리 처리

트리 체인 분할 개요 트리 체인 분할(Heavy Path Decomposition)은 트리 구조에서 효율적인 쿼리 처리를 위한 고급 자료구조 기법이다. 이 기법은 다음 네 가지 핵심 연산을 지원한다: 두 노드 x에서 y까지의 최단 경로상의 모든 노드에 값을 더한다 두 노드 x에서 y까지의 최단 경로상의 모든 노드 값의 합을 구한다 노드 x를 루트로 하는 서브트리의 모든 노드에 값을 ...

7월 10일 17:56에 게시됨

Java 기초 학습 10 - 알고리즘

큐 구조 기초 큐는 선입선출(FIFO) 구조를 가진 자료구조입니다. 배열을 이용하여 큐를 구현할 수 있으며, 기본 구현과 원형 큐(Circular Queue) 방식으로 나뉩니다. 기본 배열 큐(비최적화) 필요 변수: front = -1, rear = -1, maxSize, int[] arr 큐가 가득 찬 조건: rear == maxSize - 1, 큐가 빈 조건: rear == front 삽입(enqueue): 큐가 가득 찼는지 확인 후, rear ...

7월 10일 06:31에 게시됨

바이너리 인덱스 트리: 구현과 활용

바이너리 인덱스 트리 1. 점 업데이트와 구간 합 查询 lowbit 함수 바이너리 인덱스 트리의 핵심은 lowbit 연산입니다: lowbit(x) = x & (-x) 이 연산은 x의 이진 표현에서 가장 오른쪽에 있는 1의 위치 값을 반환합니다. 예를 들어, x = (0010010011000)₂ 라면: -x = ~x + 1 = (1101101101000)₂ x & (-x) = (0000000001000)₂ 동작 원리 배열 a[1...n]이 ...

7월 10일 04:24에 게시됨

합병 정렬(Merge Sort) 의 분할 병합 전략과 실장 예시

분할 정복 알고리즘 개요 배열 정렬을 위해 널리 사용되는 합병 정렬은 분할 정복(Divide and Conquer) 패러다임을 기반으로 합니다. 이 방식은 주어진 데이터를 작은 단위로 재귀적으로 쪼갠 후, 각 단위를 정렬된 상태로 다시 결합하여 전체 순서를 맞춥니다. 단계 1: 데이터 분할 로직 먼저 배열을 두 개의 하위 부분으로 나누는 과정을 정의합니다. 이때 중간 지점을 ...

7월 9일 17:16에 게시됨

캡슐화된 체인 포워드 스타 구현

체인 포워드 스타 클래스 (캡슐화 버전) struct ChainForwardStar { vector<int> head, to, next, weight; int edgeCount = 0; ChainForwardStar(int capacity) { head.assign(capacity + 1, -1); to.resize(capacity + 1); next.resize(capacity + 1); weight.resize(capacity + 1); } void connect ...

7월 4일 17:41에 게시됨