고정밀도 연산 기법

일반적으로 프로그래밍에서 정수형 타입(int, long long 등)으로 표현할 수 없는 매우 큰 수를 다룰 때 고정밀도 연산이 필요합니다. 고정밀도 연산의 핵심은 큰 수를 배열이나 문자열 등을 사용하여 각 자릿수를 개별적으로 저장하고, 이를 바탕으로 덧셈, 뺄셈, 곱셈, 나눗셈 등의 산술 연산을 직접 시뮬레이션하는 것입니다. 이는 마치 사람이 연필과 종이를 사용하여 ...

8월 6일 14:50에 게시됨

C++ 스택 및 큐 컨테이너 어댑터 분석과 커스텀 구현

컨테이너 어댑터의 개념 C++ 표준 템플릿 라이브러리 (STL) 에서 스택 (stack) 과 큐 (queue) 는 독립적인 데이터 구조라기보다는 기존 컨테이너를 래핑하여 특정 접근 규칙을 강제하는 컨테이너 어댑터로 분류됩니다. 이들은 내부적으로 다른 컨테이너를 저장소로 활용하며, 사용자에게는 제한된 인터페이스만을 노출합니다. 스택 (Stack) 어댑터 동작 원리 및 정의 스택 ...

8월 5일 19:11에 게시됨

C++ 멀티스레딩 기법: 조건 변수와 세마포어를 통한 작업 순서 제어

멀티스레딩 환경에서 작업 순서를 제어하는 것은 중요한 문제입니다. 본 문서에서는 C++을 사용하여 여러 스레드 간의 실행 순서를 보장하는 방법을 조건 변수와 세마포어를 활용하여 설명합니다. 1. 세 개의 스레드 순차 실행 세 개의 스레드(A, B, C)가 각각 first(), second(), third() 메서드를 호출할 때, first → second → third 순서로 출력되도록 구현합니다. #i ...

8월 5일 13:21에 게시됨

C++ 객체 수명 주기와 RVO/NRVO 컴파일러 최적화 심층 분석

함수 호출 과정에서의 객체 수명 주기와 메서드 호출 사례 1: 객체 초기화, 복사, 그리고 임시 객체의 동작 C++에서 객체가 생성되고 복사되며 소멸되는 과정을 정확히 이해하는 것은 성능 최적화의 첫걸음입니다. 다음 코드는 다양한 초기화 및 대입 상황에서 어떤 생성자와 연산자가 호출되는지 보여줍니다. #include <iostream> class DataHolder { public: ...

8월 4일 21:20에 게시됨

정수 배열의 홀짝 조건부 정렬

주어진 정수 시퀀스를 특정 규칙에 따라 재정렬하는 문제에 대해 살펴보겠습니다. 이 문제에서는 10개의 정수를 입력받아 다음과 같은 세 가지 주요 조건에 맞춰 정렬해야 합니다. 홀수는 배열의 앞쪽에 배치하고, 짝수는 뒤쪽에 배치합니다. 홀수들 사이에서는 내림차순(큰 수부터 작은 수 순서)으로 정렬합니다. 짝수들 사이에서는 오름차순(작은 수부터 큰 수 순서)으 ...

8월 4일 11:33에 게시됨

중복 문자 없는 최장 부분 문자열 찾기

주어진 문자열에서 반복되는 문자가 없는 가장 긴 부분 문자열의 길이를 찾는 알고리즘 문제입니다. 예를 들어, "abcabcbb"의 경우 중복 문자가 없는 가장 긴 부분 문자열은 "abc"이며 길이는 3입니다. "bbbbb"의 경우 가장 긴 부분 문자열은 "b"이고 길이는 1입니다. 접근 방법 1: 고정 크기 배열을 활용한 슬라이딩 윈도우 이 방법은 고정 크기 배열(예: ASCII 문자 ...

8월 4일 11:27에 게시됨

2차원 편순 문제를 활용한 레몬의 행복도 계산

레몬 나무에 n개의 레몬이 매달려 있으며, 각각은 두 가지 속성인 시각적 아름다움(a_i)과 신맛 강도(b_i)를 가진다. 특정 레몬 i를 섭취했을 때 얻는 기쁨 값 e_i는 자기 자신을 제외하고, 아름다움과 신맛 모두가 자신 이하인 다른 레몬들의 개수로 정의된다. 즉, 다음 조건을 동시에 만족하는 인덱스 j의 수이다: j ≠ i a_j ≤ a_i b_j ≤ b_i 모든 레몬에 대해 ...

8월 4일 07:24에 게시됨

루고 P15440 문제 해설

루고 문제에 대한 제 해법입니다. 문제의 핵심은 신호등의 수가 2025개라는 점에서 출발하며, 이때 시간 복잡도가 O(n^2)보다 작은 동적 계획법(DP)을 고려해야 합니다. 각 조작 후 불이 켜진 횟수와 초기 상태 간의 차이를 상태로 설정하면 편리합니다. 첫 번째 조작 후 상태는 0으로 시작합니다. 여기서 dp[i][j]는 (i+1)번째 조작 후 상태 j를 가질 경우의 수를 나타냅 ...

8월 3일 16:20에 게시됨

C#에서 C++ DLL 호출하는 방법

C#에서 C++ DLL을 호출해야 하는 경우 C#으로 클라이언트 애플리케이션을 개발하다 보면 종종 네이티브 C++ 라이브러리를 사용해야 하는 상황이 발생합니다. 이때 P/Invoke(Platform Invoke) 기능을 활용하면 C# 프로그램에서 C++로 작성된 DLL을 호출할 수 있습니다. 본 문서에서는 Visual Studio 2022 환경에서 C++ DLL을 생성하고 C#에서 호출하는 전체 과정을 단계별 ...

8월 3일 09:47에 게시됨

C++로 구현하는 정보 올림피아드 문제: 장비 합성 시스템

문제 설명 특정 게임에서는 다양한 장비를 수집하고 강화할 수 있는 시스템이 존재한다. 각 장비는 여러 개의 슬롯을 가지며, 각 슬롯에는 특정 가치를 가진 인쇄물이 무한히 존재한다. 게임 내 특정 캐릭터(예: 카구야마 하루카)가 기계 팔을 사용해 아래 방향으로만 움직이며 인쇄물을 추출한다. 이때 기계 팔은 오른쪽으로 이동하거나 제자리에 머무를 수 있으며, 시작 ...

8월 2일 18:30에 게시됨