AC 자동기와 Luogu 문제 해결: P3808 및 P3796
AC 자동기概述
AC 자동기(Aho-Corasick Automaton)는 여러 개의 패턴을 동시에 검색할 때 사용하는高效的인 알고리즘이다. KMP 알고리즘의 확장판이라고 볼 수 있으며, Trie 트리와 실패 함수(Failure Function)를 결합하여 구현한다. 이 알고리즘은 텍스트 하나에서 여러 개의 패턴이 등장하는 횟수를 모두 찾을 수 있다.
문제介绍
본 article에서는 Luogu의 두 가지 ...
6월 21일 00:20에 게시됨
C++로 배우는 배열과 연결 리스트 기본 연산
배열 (Array)
1. 배열 초기화
// 스택에 할당
int arr[5];
int nums[5] = { 1, 2, 3, 4, 5 };
// 힙에 할당
int* agg = new int[5];
int* ngg = new int[5] {1, 2, 3, 4, 5};
2. 요소 접근
int getElement(int* data, int idx) {
return *(data + idx);
}
3. 데이터 삽입
void insertElement(int* data, int len, int value, int pos) {
for (int i = len - ...
6월 20일 19:52에 게시됨
C++ 템플릿의 핵심 기능 (함수 템플릿과 클래스 템플릿)
함수 템플릿
함수 템플릿은 하나의 함수 정의로 다양한 데이터 타입에 대해 동작할 수 있도록 해주는 기능입니다. 이를 통해 코드 중복을 줄이고, 유연한 구현이 가능해집니다.
기본 예제: 값 교환
정수와 실수를 위한 별도의 스왑 함수를 작성하는 대신, 단일 템플릿으로 처리할 수 있습니다.
template <typename Type>
void Swap(Type& a, Type& b) {
...
6월 20일 16:48에 게시됨
소인수분해 구현: 루트 N 최적화 방법
소인수분해 문제
양의 정수 N이 주어졌을 때, 이를 소수들의 곱으로 분해하는 문제입니다.
예: 60 = 2 × 2 × 3 × 5
입력 조건
하나의 정수 N (2 ≤ N ≤ 1,000,000,000)
출력 조건
N의 소인수들을 오름차순으로 출력
예시
입력: 60
출력: 2 2 3 5
입력: 3
출력: 3
접근 방법
초보자들은 보통 2부터 N까지 반복문을 돌며 확인하지만, N이 최대 10억일 때는 시간 초과 ...
6월 20일 06:12에 게시됨
C++ 람다와 클로저의 내부 동작 및 메모리 비용 분석
소프트웨어 엔지니어링 관점에서 람다(Lambda)는 소스 코드상에 존재하는 구문적 표현식이며, 클로저(Closure)는 해당 코드가 실행될 때 상태를 포함하여 메모리에 실체화된 런타임 객체를 의미합니다.
클로저의 내부 구조와 메모리 모델
C++ 컴파일러는 람다 표현식을 마주쳤을 때 단순한 함수 포인터가 아닌, 고유한 타입을 가진 익명의 클래스(또는 구조체) 인스턴스로 ...
6월 20일 02:31에 게시됨
TV 구독 최소화 문제 (고급 버전)
시간 제한: 2초
메모리 제한: 256MB
입력: 표준 입력
출력: 표준 출력
쉬운 버전과 고급 버전의 유일한 차이점은 제약 조건입니다.
BerTV 채널은 매일 k개의 TV 프로그램 중 하나의 에피소드를 방영합니다. 다음 n일간의 방송 스케줄을 알고 있습니다: 정수 시퀀스 a₁, a₂, ..., aₙ (1≤aᵢ≤k), 여기서 aᵢ는 i일째에 방영될 프로그램입니다.
프로그램 구독은 해당 프로그램의 ...
6월 20일 01:25에 게시됨
QTableView 열 너비를 균등하게 조정하는 방법
QTableView에서 열 너비 자동 조정 전략
Qt 애플리케이션 개발 시, 데이터 표시용 위젯으로 QTableView를 사용하는 경우가 많다. 특히 데이터베이스 조회 결과를 표 형태로 출력할 때, 열의 너비가 적절하지 않으면 가독성이 떨어지기 때문에 열 너비를 스마트하게 조정하는 것이 중요하다. 기본 제공 기능만으로는 제한적이므로, 실제 콘텐츠에 맞춰 최적의 너비를 계산 ...
6월 19일 19:06에 게시됨
QextSerialPort-1.2를 활용한 크로스 플랫폼 시리얼 통신 구현
QextSerialPort-1.2 라이브러리 개요
하드웨어 통신이 필요한 소프트웨어 개발 환경에서 안정적이고 기능이 풍부한 시리얼 포트 통신 라이브러리는 개발 효율성과 시스템 성능을 높이는 핵심 요소입니다. QextSerialPort-1.2는 Qt 프레임워크 기반에서 널리 사용되는 라이브러리로, 복잡한 시리얼 통신 작업을 간단한 API로 처리할 수 있도록 설계되었습니다.
이 라이브러 ...
6월 19일 17:10에 게시됨
임베디드 C++ 알고리즘 완벽 가이드
1. 수정되지 않는 시퀀스 알고리즘
이러한 알고리즘들은 작업 중인 컨테이너의 요소들을 변경하지 않습니다.
1.1 찾기 알고리즘: find와 find_if
find(start, end, value): value와 동일한 첫 번째 요소를 찾아 반복자를 반환 (없으면 end 반환)
find_if(start, end, 조건자): 조건을 만족하는 첫 번째 요소를 찾습니다
find_end(start, end, sub_start, sub_end): 부분 ...
6월 19일 01:34에 게시됨
LLVM Pass 및 Pwn 기법 분석
LLVM Pass 및 Pwn 기법 분석
LLVM Pass를 활용한 취약점 공격 방법을 다루며, 이를 통해 프로그램의 내부 구조와 동작 원리를 이해하고 공격 전략을 수립하는 방법을 설명합니다.
환경 설정
LLVM Pass 개발 시 자주 발생하는 문제로는 .so 파일 로드 실패가 있습니다. 이 문제는 LLVMHello.so: cannot open shared object file과 같은 오류 메시지로 나타납니다. 이를 해결 ...
6월 18일 23:54에 게시됨