연결 리스트 알고리즘 문제 풀이
연결 리스트 요소 제거
문제 설명:
주어진 연결 리스트에서 특정 값을 가진 모든 노드를 제거하는 문제이다.
解题 전략:
노드를 삭제할 때 현재 노드의 next 포인터를 다음 노드의 next로 변경하면 된다. C++을 사용하므로 메모리 해제도 반드시 처리해야 한다. 더미 노드를 사용하면 헤드 노드의特殊性한 경우를 처리할 필요가 없어져 코드가 간단해진다.
구현 코드:
...
6월 17일 19:49에 게시됨
C++ 생성자 초기화 순서가 프로그램 안정성을 좌우하는 이유
초기화 리스트의 실제 동작 메커니즘
C++ 클래스 객체가 생성될 때 멤버 변수의 초기화 순서는 클래스 내부에서 선언된 순서에 엄격히 따르며, 초기화 리스트에 작성된 순서와는 무관하다. 이는 많은 개발자가 간과하는 언어 규칙으로, 잘못된 가정 하에 작성된 코드는 예측 불가능한 동작을 유발한다.
순서 불일치로 인한 위험 사례
class RiskyConstructor {
int alp ...
6월 17일 17:57에 게시됨
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에 게시됨