C++ 핵심 개념 정리: 포인터, STL 컨테이너 및 활용법

C++ 학습 시 자주 사용되는 핵심 개념들을 코드 예제와 함께 정리합니다. 기본 입출력 및 배열 초기화 #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N = 110; int d[N]; // 전역 변수 int main() { int n; cin >> n; cout << n * 2 << endl; // memset을 사용한 ...

6월 9일 01:15에 게시됨

Xorshift 기반 난수 배열 생성과 선형 시간 선택 알고리즘 활용

알고리즘 대회에서 자주 등장하는 난수 배열 생성 방식과 std::nth_element를 활용한 효율적인 문제 해결 기법을 살펴본다. 특히 대용량 데이터에서 순위 기반 쿼리를 처리하는 방법이 핵심이다. Xorshift RNG 구현 다음은 경량 의사난수 생성기(Pseudo-Random Number Generator)의 한 종류인 xorshift 계열 구현이다. 세 개의 상태 변수를 이용하며, 비트 연산으로 빠르 ...

6월 8일 21:35에 게시됨

C++ STL map lower_bound 비교자 사용 시 주의할 점과 성능 최적화 전략

std::map은 C++ 표준 라이브러리에서 제공하는 정렬된 연관 컨테이너로, 내부적으로 레드-블랙 트리를 사용합니다. lower_bound 멤버 함수는 주어진 키보다 작지 않은 첫 번째 요소를 찾는 데 사용되며, 시간 복잡도는 O(log n)입니다. 이 함수의 동작은 컨테이너가 사용하는 비교자(Comparator)에 크게 의존합니다. 비교자의 역할과 사용자 정의 비교자 std::map은 기본 ...

6월 5일 23:41에 게시됨

C++ 다중 기준 정렬 구현 방법

이원 정렬의 개념 알고리즘 문제 풀이 과정에서 두 가지 이상의 데이터를 묶어서 정렬해야 하는 상황을 자주 접하게 됩니다. 예를 들어, 길이가 $n$인 두 수열 $A = \{a_1, a_2, \dots, a_n\}$과 $B = \{b_1, b_2, \dots, b_n\}$이 주어졌을 때, 먼저 $a_i$를 기준으로 오름차순 정렬하고, $a_i$ 값이 같다면 $b_i$를 기준으로 다시 오름차순 정렬하는 방식입니다. 이를 C+ ...

6월 4일 17:03에 게시됨

C++ Friend 기능의 심층 분석

Friend는 C++에서 논란이 있으면서도 실용적인 가치를 지닌 기능이다. 1. 언어 설계 철학의 차이 C#에서는 private 멤버에 대한 접근이 해당 클래스 내부에서만 허용된다. 하지만 C++은 다른 접근 방식을 취한다: 캡슐화는 절대적 차단이 아닌, 접근 권한의 세밀한 제어를 의미한다. C++에서는 특정 함수나 클래스가 외부에 있더라도 신뢰할 수 있는 경우, 이를 허용 ...

6월 3일 16:32에 게시됨

스택과 큐의 비교 및 구현

스택과 큐는 컴퓨터 과학에서 널리 사용되는 두 가지 기본적인 데이터 구조입니다. 이 글에서는 이 두 데이터 구조에 대해 자세히 설명하고 C++ 예제 코드를 통해 구현 방법을 보여드리겠습니다. 스택 (Stack) 스택은 후입선출(LIFO, Last In First Out) 특성을 가진 데이터 구조로, 한쪽 끝(스택 상단)에서만 삽입과 삭제 연산이 가능합니다. 스택의 기본 연산은 다음과 ...

6월 2일 22:33에 게시됨

C++ STL 알고리즘 완벽 가이드

1. 비수정 시퀀스 알고리즘 이러한 알고리즘은 작업 대상 컨테이너의 요소를 변경하지 않습니다. 1.1 find와 find_if find(begin, end, value): value와 동일한 첫 번째 요소를 찾아 반복자 반환 (못 찾으면 end 반환) find_if(begin, end, predicate): 조건자를 만족하는 첫 번째 요소 찾기 find_end(begin, end, sub_begin, sub_end): 하위 시퀀스가 마지막으로 나타나 ...

6월 1일 02:14에 게시됨

C++ STL 알고리즘 종합 가이드

1. 비변경 시퀀스 알고리즘 이 알고리즘들은 대상 컨테이너의 요소들을 수정하지 않고 동작합니다. 1.1 검색 관련 함수 find(start, end, target): 특정 값과 일치하는 첫 번째 요소를 찾습니다. find_if(start, end, condition): 조건을 만족하는 첫 번째 요소를 탐색합니다. find_end(start, end, pattern_start, pattern_end): 하위 시퀀스가 마지막으로 나타나는 위치 ...

5월 30일 17:57에 게시됨

C++로 구현하는 LRU 캐시 시뮬레이션

캐시 시뮬레이션 문제는 메모리 계층 구조의 핵심 개념을 검증하는 대표적인 알고리즘 문제입니다. 이 글에서는 C++를 활용해 집합-연관 매핑 방식의 캐시를 모델링하고, LRU(Least Recently Used) 교체 정책을 적용하는 방법을 살펴봅니다. 문제 개요 주어진 메모리 주소 스트림에 대해 캐시 히트/미스를 판정하고, 미스 발생 시 LRU 알고리즘으로 블록을 교체해야 합니 ...

5월 29일 10:03에 게시됨

C++ 표준 템플릿 라이브러리(STL) 핵심 알고리즘 가이드

1. 비수정 시퀀스 알고리즘 컨테이너의 데이터를 변경하지 않고 탐색이나 비교 작업을 수행하는 알고리즘입니다. find, find_if, find_end find: 특정 값과 일치하는 첫 번째 요소를 찾습니다. find_if: 조건(서술자)을 만족하는 첫 번째 요소를 찾습니다. find_end: 대상 범위 내에서 특정 서브 시퀀스가 마지막으로 나타나는 위치를 반환합니다. vector&l ...

5월 26일 23:29에 게시됨