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

바이너리 인덱스 트리 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에 게시됨

C++에서의 형 변환: 네 가지 캐스팅 연산자 심층 분석

개요 C++은 형변환(type casting)을 위한 네 가지 전용 키워드를 제공한다. 이들은 각각 고유한 목적과 사용 범위를 가지며, 기존 C 스타일의 괄호 캐스팅보다 명확하고 안전한 문맥을 제공한다. 해당 연산자는 다음과 같다: static_cast dynamic_cast const_cast reinterpret_cast 이들 각각은 런타임 오버헤드, 타입 안정성, 그리고 사용 가능한 상황에서 차 ...

7월 7일 02:37에 게시됨

睿抗 RC 프로그래밍 대회 국선전 문제 해설 및 C++ 실전 구현

대회 경향성 분석 및 난이도 평가 2022 년부터 2024 년까지 이어진 전국 본선 모의 훈련 문제들을 종합적으로 분석한 결과, 전반적인 난이도 흐름은 2022 > 2024 > 2023 순으로 예상된다. 출제 패턴을 살펴보면 대부분 초기 문제에 문자열 처리나 시뮬레이션 유형이 등장하며, 이후 완전 탐색, 자료구조 활용, 그래프 이론과 동적 계획법(DP) 결합 형태가 차례로 배치된다 ...

7월 5일 21:26에 게시됨

세 명을 위한 카드 게임

문제 설명 앨리스, 밥, 찰리가 카드 게임을 하고 있습니다. 각 플레이어는 각각 카드 더미를 가지고 있으며, 각 카드에는 문자 a, b, c 중 하나가 적혀 있습니다. 각 더미에 있는 카드의 순서는 변경할 수 없습니다. 플레이어들은 번갈아가며 턴을 진행합니다. 앨리스가 먼저 시작합니다. 현재 턴인 플레이어의 더미에 카드가 하나 이상 있으면, 가장 위에 있는 카드를 버 ...

7월 5일 20:40에 게시됨

C++에서 자주 사용하는 문장 구조

변수 선언 C++에서는 변수를 사용하기 전에 반드시 선언해야 합니다. 기본 형식은 형식명 변수명;입니다. 예를 들어, int value; 는 정수형 변수 value를 선언합니다. 같은 타입의 여러 변수를 한 줄에 선언할 수도 있습니다: double x, y, z; 사용자 정의 타입(예: 구조체)도 동일하게 처리할 수 있습니다. 예를 들어, struct Person가 있다면 Person person1;로 인스턴 ...

7월 5일 00:10에 게시됨

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

체인 포워드 스타 클래스 (캡슐화 버전) 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에 게시됨

C++ 제어 구조의 심화 이해와 효율적인 메모리 활용 기법

1. do-while 반복문의 구조와 활용 C++에서 do-while문은 조건식을 평가하기 전에 코드 블록을 최소 한 번은 실행해야 할 때 사용하는 제어 구조입니다. 1.1 기본 메커니즘 do { // 최소 1회 실행되는 로직 } while (반복_조건); 일반적인 while문은 진입 전 조건을 검사하지만, do-while은 본문을 먼저 실행한 후 마지막에 조건을 확인합니다. 1.2 실전 활용 사례 ...

7월 2일 21:50에 게시됨

리눅스 프로세스 신호 생성 및 처리

터미널 키 입력을 통한 신호 발생 사용자는 키보드 조합을 통해 프로세스에 다양한 신호를 전달할 수 있습니다: Ctrl+C: SIGINT 신호 전송 Ctrl+\: SIGQUIT 신호로 프로세스 종료 Ctrl+Z: SIGTSTP 신호로 포그라운드 프로세스 일시정지 이러한 신호들은 운영체제가 하드웨어 인터럽트를 소프트웨어적으로 시뮬레이션한 결과로, CPU 대상의 인터럽트와 달리 프로세스에 직 ...

6월 29일 03:40에 게시됨

C++ 연관 컨테이너 std::set과 std::map의 활용

std::set: 유일한 요소의 정렬된 집합 std::set은 중복을 허용하지 않는 키(Key)들의 집합을 관리하는 컨테이너입니다. 내부적으로 주로 레드-블랙 트리(Red-Black Tree) 구조로 구현되어 있어, 삽입, 삭제, 탐색 작업 시 O(log N)의 시간 복잡도를 보장합니다. 만약 중복된 값을 허용해야 한다면 std::multiset을 대신 사용하면 됩니다. 주요 제어 메서드 ...

6월 27일 05:56에 게시됨

C/C++ 핵심 개념 정리

변수의 유효 범위와 저장 구역 변수는 지역 변수와 전역 변수로 나뉜다. 지역 변수는 중괄호({})로 둘러싸인 코드 블록 내에서만 유효하며, 스택 영역에 할당되어 해당 블록이 종료되면 자동으로 소멸된다. 반면 전역 변수는 프로젝트 전체에서 접근 가능하며, 전역 영역(정적 메모리 영역)에 저장되어 프로그램 종료 시까지 유지된다. 특수한 경우: 지역 블록 내에서 ...

6월 24일 00:54에 게시됨