본문 바로가기
반응형
[C++로 배우는 알고리즘과 자료구조] Day 24: 너비 우선 탐색 (BFS) 너비 우선 탐색 (BFS, Breadth-First Search)너비 우선 탐색(BFS)은 그래프 탐색 알고리즘 중 하나로, 시작 정점에서 출발하여 인접한 정점들을 모두 탐색한 후, 탐색이 끝난 정점의 인접 정점을 탐색하는 방식입니다. BFS는 큐 자료구조를 사용하여 구현할 수 있습니다.BFS의 주요 특징:시간 복잡도: (O(V + E)), 여기서 (V)는 정점의 수, (E)는 간선의 수입니다.공간 복잡도: (O(V)), 큐와 방문 여부를 저장하는 배열의 크기입니다.BFS 구현그래프 구현 (인접 리스트 사용)#include #include #include #include // 그래프 클래스 정의class Graph {public: Graph(int vertices); void addEdge(i.. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조 심화] Day 24: 확률적 알고리즘 (Monte Carlo, Las Vegas 알고리즘) 확률적 알고리즘확률적 알고리즘은 무작위성을 도입하여 문제를 해결하는 알고리즘입니다. 이러한 알고리즘은 일반적으로 평균적인 성능이 좋으며, 최악의 경우를 피할 수 있습니다. 확률적 알고리즘은 크게 두 가지 유형으로 나눌 수 있습니다: Monte Carlo 알고리즘과 Las Vegas 알고리즘.Monte Carlo 알고리즘Monte Carlo 알고리즘은 정해진 시간 내에 정답을 찾을 확률을 높이는 알고리즘입니다. 정확한 답을 보장하지 않지만, 답을 찾을 확률이 높습니다.예시: 소수 판별Monte Carlo 알고리즘을 사용하여 주어진 수가 소수인지 판별하는 방법입니다. 주로 Miller-Rabin 소수 판별법이 사용됩니다. Monte Carlo 알고리즘 구현: Miller-Rabin 소수 판별법#include.. 2024. 8. 1.
[C++ 게임 개발 시리] Day 24: 3D 게임 프로젝트 시작 (1) 3D 게임 프로젝트 시작이제까지 학습한 3D 그래픽 기법을 활용하여 간단한 3D 게임 프로젝트를 시작하겠습니다. 오늘부터 3일간에 걸쳐 3D 게임 프로젝트를 단계별로 완성해 나갈 것입니다. 첫 번째 단계로 게임의 기본 구조를 설정하고, 간단한 3D 장면을 렌더링해보겠습니다.프로젝트 설정프로젝트 구조먼저, 프로젝트 디렉토리 구조를 설정합니다.3DGameProject/|-- include/|-- src/| |-- main.cpp| |-- Shader.h| |-- Shader.cpp|-- resources/| |-- textures/| |-- models/|-- CMakeLists.txtCMake 설정프로젝트를 빌드하기 위해 CMake 설정 파일을 작성합니다.cmake_minimum_requ.. 2024. 8. 1.
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 24: 프로젝트: 스마트 홈 시스템 구축 (3) 스마트 홈 시스템의 완성스마트 홈 시스템 구축 프로젝트의 세 번째 단계에서는 추가적인 기능을 구현하고 시스템을 최적화하여 완성합니다. 이를 통해 보다 안정적이고 기능적인 스마트 홈 시스템을 구축합니다.1. 추가적인 기능 구현스마트 홈 시스템에 몇 가지 추가적인 기능을 구현해 보겠습니다. 예를 들어, 온도 임계값을 설정하여 특정 온도 이상일 때 자동으로 액추에이터를 작동시키는 기능을 추가할 수 있습니다. 예제: 자동 제어 기능 추가다음 예제는 온도 임계값을 설정하여 특정 온도 이상일 때 자동으로 팬을 작동시키는 기능을 구현합니다.#include #include #include // Wi-Fi 설정const char* ssid = "your_SSID";const char* password = "your_PA.. 2024. 8. 1.
[C++ 마스터]Day 25: 스마트 포인터 (unique_ptr, shared_ptr) 스마트 포인터 (Smart Pointers)스마트 포인터는 메모리 관리 문제를 해결하기 위해 C++11에서 도입된 기능입니다. 스마트 포인터는 자동으로 메모리를 관리하여, 메모리 누수와 같은 문제를 줄여줍니다. C++ 표준 라이브러리는 unique_ptr, shared_ptr, weak_ptr라는 세 가지 주요 스마트 포인터를 제공합니다. unique_ptrunique_ptr는 소유권이 단 하나의 객체에만 있는 스마트 포인터입니다. 한 번에 한 객체만 소유권을 가질 수 있으며, 소유권을 다른 객체로 이동할 수 있습니다. unique_ptr는 가장 가볍고, 소유권 이전을 명확하게 할 수 있는 장점이 있습니다. 1. unique_ptr 기본 사용법#include #include using namespace .. 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 25: CMake를 이용한 빌드 시스템 관리 CMake 소개CMake는 오픈 소스, 크로스 플랫폼 빌드 시스템입니다. 프로젝트의 빌드 과정을 자동화하고, 다양한 플랫폼과 컴파일러에서 일관된 빌드를 제공합니다. 오늘은 CMake를 사용하여 빌드 시스템을 관리하는 방법에 대해 학습하겠습니다. CMake 기본 사용법1. CMakeLists.txt 파일CMake 프로젝트는 CMakeLists.txt 파일을 사용하여 구성됩니다. 이 파일에는 프로젝트 설정, 소스 파일 목록, 빌드 옵션 등이 포함됩니다. 간단한 예제cmake_minimum_required(VERSION 3.10)project(MyProject)set(CMAKE_CXX_STANDARD 17)add_executable(my_executable main.cpp) 이 예제는 C++17 표준을 사용하.. 2024. 8. 1.
[C++ 성능 최적화 및 고급 테크닉] Day 25: 프로젝트: 고성능 매트릭스 라이브러리 개발 (2) 프로젝트 목표이 단계에서는 매트릭스 라이브러리의 성능을 더욱 향상시키기 위해 최적화 기법을 적용하고, 추가적인 기능을 구현합니다. 특히, 다음과 같은 부분을 다룹니다:루프 언롤링 및 벡터화: 성능을 향상시키기 위한 루프 최적화.캐시 친화적 접근: 메모리 접근 패턴을 최적화하여 캐시 효율성을 높입니다.추가 기능 구현: 행렬의 역행렬 및 행렬식 계산 기능 추가. Step 1: 루프 언롤링 및 벡터화행렬 곱셈에서 루프 언롤링을 적용하여 성능을 향상시킵니다. 루프 언롤링은 반복문 내의 작업을 반복적으로 실행하지 않고, 여러 번의 작업을 한 번에 수행하도록 변경하는 기법입니다. Matrix.cpp: 루프 언롤링 적용#include "Matrix.h"Matrix operator*(const Matrix& lhs, .. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조 심화] Day 21: 문자열 동적 계획법 (Edit Distance, Longest Common Subsequence) 문자열 동적 계획법문자열 관련 문제는 많은 응용 분야에서 중요합니다. 오늘은 두 가지 주요 문제인 편집 거리(Edit Distance)와 최장 공통 부분 수열(Longest Common Subsequence, LCS)에 대해 학습하겠습니다.편집 거리 (Edit Distance)편집 거리(Edit Distance)는 두 문자열을 같게 만들기 위해 필요한 최소 편집 연산 횟수를 의미합니다. 가능한 편집 연산은 삽입, 삭제, 교체입니다.문제 정의두 문자열 ( s1 )과 ( s2 )가 주어졌을 때, ( s1 )을 ( s2 )로 변환하는 데 필요한 최소 편집 연산 횟수를 계산합니다.편집 거리 구현다음은 C++로 편집 거리 문제를 해결하는 예제입니다.#include #include #include #include .. 2024. 8. 1.
[C++ 게임 개발 시리즈] Day 21: 적 캐릭터와 NPC의 AI 구현 적 캐릭터와 NPC의 AI 구현오늘은 행동 트리(Behavior Tree)를 사용하여 적 캐릭터와 NPC의 AI를 구현하는 방법을 학습하겠습니다. 이를 통해 게임 캐릭터가 주변 환경과 상호작용하고, 다양한 상황에 반응하는 방법을 배울 것입니다.기본 AI 동작 정의적 캐릭터와 NPC의 AI는 다양한 동작으로 구성됩니다. 여기서는 찾기, 이동, 공격과 같은 기본 동작을 정의하겠습니다.기본 노드 클래스 및 동작 구현기본 노드 클래스 정의우선, AI 동작을 정의하는 기본 노드를 구현합니다.#include #include #include enum class NodeStatus { Success, Failure, Running};class Node {public: virtual ~Node() .. 2024. 8. 1.
[C++ 임베디드 시스템 프로그래밍] Day 21: MQTT 프로토콜 MQTT 프로토콜의 개요MQTT(Message Queuing Telemetry Transport)는 경량의 메시지 프로토콜로, 제한된 대역폭과 자원을 가진 네트워크 환경에서 효율적인 통신을 위해 설계되었습니다. MQTT는 주로 IoT(사물인터넷) 장치 간의 통신에 사용됩니다. 오늘은 MQTT 프로토콜을 사용하여 메시지를 송수신하는 방법을 학습하겠습니다.1. MQTT 프로토콜의 기본 개념MQTT는 퍼블리셔(Publisher)와 서브스크라이버(Subscriber) 모델을 기반으로 합니다. 퍼블리셔는 메시지를 특정 토픽(Topic)에 발행하고, 서브스크라이버는 해당 토픽을 구독하여 메시지를 수신합니다. MQTT 브로커(Broker)는 퍼블리셔와 서브스크라이버 간의 메시지를 중개합니다. MQTT의 주요 구성 요.. 2024. 8. 1.
반응형