CF486B 문제 풀이 - 행렬 OR 연산 검증

문제 분석 본 문제는 두 개의 n×m 이진 행렬 A와 B가 주어졌을 때, B 행렬이 특정 규칙에 따라 A 행렬로부터 생성되었는지 확인하는 문제이다. 생성 규칙: B[i][j]는 A 행렬의 i번째 행 전체와 j번째 열 전체에 대해 OR 연산을 수행한 결과값이다. OR 연산의 특성을 먼저 파악해야 한다: 0|0 = 0 0|1 = 1 1|0 = 1 1|1 = 1 핵심 관찰 OR 연산의 특성을 통해 두 가지 ...

6월 17일 01:34에 게시됨

CH372 USB 내장 펌웨어 클래스 구현

CH372 USB 칩을 사용하여 USB 데이터 통신을 구현할 때, CH372는 기본적으로 두 가지 동작 모드를 지원합니다. 내장 펌웨어 모드와 외장 펌웨어 모드가 그것입니다. 내장 펌웨어 모드로 설정하면 PC侧 애플리케이션에서 USB 칩 제조사가 제공하는 DLL을 호출해야 합니다. 기본적인 데이터收发 기능을 클래스 라이브러리로 캡슐화하면 이후 프로젝트에서 쉽게 재사용할 수 ...

6월 17일 01:22에 게시됨

C++ 멀티스레딩: thread

프로세스와 스레드 프로세스: 시스템 리소스 할당의 최소 단위, 일반적으로 실행 중인 프로그램 인스턴스로 정의됨 스레드: 시스템 작업 스케줄링의 최소 단위 프로세스 간 통신: 파이프, 세마포어, 신호, 메시지 큐, 공유 메모리, 소켓 스레드 간 통신: 락 메커니즘, 세마포어 메커니즘, 신호 메커니즘, 배리어 동기화: 작업 조각의 순서를 보장하는 것 상호 배제: 동일한 ...

6월 16일 20:34에 게시됨

버블 정렬 알고리즘의 원리와 구현

알고리즘 개념 설명 버블 정렬(Bubble Sort)은 인접한 두 요소를 비교하여 필요 시 교환하는 방식으로 작동하는 간단한 정렬 기법입니다. 배열 내에서 가장 큰 값이 거품(bubble)처럼 점차 끝으로 밀려나가기 때문에 이 이름이 붙었습니다. n개의 원소로 구성된 배열을 정렬한다고 가정할 때, 첫 번째 패스에서는 처음부터 끝까지 인접한 원소들을 비교하며 더 큰 값을 오 ...

6월 15일 17:34에 게시됨

C++를 활용한 PROJ 라이브러리 좌표 변환 API 구현 및 활용

PROJ 라이브러리 개요 PROJ는 지리 공간 데이터의 좌표계를 서로 다른 기준 좌표계(CRS)로 변환하는 데 특화된 오픈소스 라이브러리입니다. 명령줄 인터페이스(CLI)뿐만 아니라 C/C++ API를 통해 애플리케이션에 직접 통합할 수 있습니다. 이 글에서는 C++ 환경에서 PROJ의 C API를 호출하여 좌표 변환 기능을 구현하고 활용하는 방법을 다룹니다. CentOS 환경에서의 설치 ...

6월 13일 20:36에 게시됨

AtCoder Beginner Contest 357 문제 분석 및 풀이

A - 손 소독하기 N명의 외계인이 순차적으로 손을 소독하려고 합니다. 각 외계인은 H_i개의 손을 가지고 있으며, 전체를 소독해야 합니다. 소독제는 총 M회 사용할 수 있습니다. 한 외계인이 소독을 할 때 필요한 양만큼만 사용하며, 부족하면 남은 양만 소모합니다. 모든 손을 소독한 외계인의 수를 구하세요. 단순히 앞에서부터 순회하면서 소독제 잔량을 갱신하고, 소진 ...

6월 13일 19:05에 게시됨

C++ 객체 모델, this 포인터, 그리고 friend 키워드 심층 분석

C++ 객체 메모리 모델 C++에서 클래스의 멤버 변수와 멤버 함수는 메모리 상에서 완전히 분리되어 저장됩니다. 객체의 크기(sizeof)를 계산할 때 포함되는 것은 오직 비정적(non-static) 멤버 변수뿐입니다. 멤버 변수가 하나도 없는 빈 클래스의 경우, 컴파일러는 각 객체가 고유한 메모리 주소를 가질 수 있도록 1바이트의 공간을 할당합니다. 반면, 정적 멤버 변수와 모 ...

6월 12일 23:57에 게시됨

KMP 문자열 매칭 알고리즘 C++ 구현과 next 배열 생성 원리

KMP(Knuth-Morris-Pratt) 알고리즘은 문자열 매칭 문제를 해결하는 효율적인 알고리즘으로, 기존의 브루트 포스 방식이 O(n*m)의 시간 복잡도를 가지는 반면, 패턴 문자열을 전처리하여 next 배열을 생성함으로써 O(n+m)의 시간 복잡도로 최적화합니다(여기서 n은 메인 문자열의 길이, m은 패턴 문자열의 길이). 본 글에서는 핵심 원리를 바탕으로 C++ 코드를 통해 KMP 알 ...

6월 12일 22:20에 게시됨

AtCoder 초보자 대회 450 (ABC450)

A - 3,2,1,GO 값을 입력받은 후 1부터 입력값까지 반복하여 출력합니다. 코드 보기 #include<bits/stdc++.h> using namespace std; int n; int main(){ cin >> n; for(int i = n; i > 1; --i) cout << i << ','; cout << 1; return 0; } B - Split Ticketing a, b, c를 모두 반복하며 조건을 검사합니다. 조 ...

6월 12일 19:32에 게시됨

CMake 기초: 멀티플랫폼 빌드 도구 입문

CMake 개요 C/C++ 개발자라면 한 번쯤 겪어봤을 것이다. 오픈소스 라이브러리를 직접 빌드하려 할 때, Visual Studio 버전 차이로 인해 무수한 오류에 마주치고, 결국 포기하는 경험. 이런 문제는 프로젝트의 확산에도 큰 장애물이 된다. 특히 크로스플랫폼 개발 환경에서는 더욱 심각하다. Windows에서 개발한 후 Ubuntu 서버로 배포할 때, 플랫폼별로 별도의 빌드 스크립 ...

6월 12일 17:42에 게시됨