본문 바로가기
반응형
[C++로 배우는 알고리즘과 자료구조 심화] Day 26: 선형 계획법 (Linear Programming) 선형 계획법 (Linear Programming)선형 계획법은 주어진 선형 제약 조건하에서 선형 목표 함수를 최적화(최대화 또는 최소화)하는 문제를 해결하는 기법입니다. 선형 계획법은 경제학, 운영 연구, 엔지니어링 등 다양한 분야에서 사용됩니다. 가장 널리 알려진 방법은 단체법 (Simplex Method)과 내부 점 방법 (Interior Point Method)입니다.선형 계획법 문제 정의일반적인 선형 계획법 문제는 다음과 같이 정의됩니다:[\begin{aligned}& \text{Maximize (or Minimize)} \quad & c^T x \& \text{subject to} \quad & Ax \leq b \& & x \geq 0\end{aligned}]여기서 (c)는 목표 함수의 계수 .. 2024. 8. 1.
[C++ 게임 개발 시리즈] Day 26: 3D 게임 프로젝트 시작 (3) 3D 게임 프로젝트 시작 (3)어제는 3D 게임 프로젝트에 카메라 컨트롤과 조명을 추가하여 장면을 더욱 현실감 있게 만드는 방법을 학습했습니다. 오늘은 추가 기능을 구현하여 게임을 더욱 발전시키겠습니다. 적 캐릭터의 AI와 간단한 충돌 처리를 추가하겠습니다.적 캐릭터 AI 구현적 캐릭터는 플레이어를 추적하고 공격하는 간단한 AI를 가집니다. 이를 위해 적 캐릭터가 플레이어의 위치를 추적하고 일정 거리 안으로 들어오면 공격하는 동작을 구현합니다. Enemy 클래스 작성Enemy 클래스를 작성하여 적 캐릭터의 위치와 AI 동작을 관리합니다.#ifndef ENEMY_H#define ENEMY_H#include class Enemy {public: glm::vec3 Position; float Spe.. 2024. 8. 1.
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 26: FreeRTOS를 이용한 멀티태스킹 FreeRTOS 멀티태스킹 개요FreeRTOS는 실시간 운영 체제(RTOS)로, 임베디드 시스템에서 멀티태스킹을 구현할 수 있는 기능을 제공합니다. 오늘은 FreeRTOS의 다양한 기능을 활용하여 멀티태스킹 시스템을 더욱 효율적으로 구현하는 방법을 학습하겠습니다.1. FreeRTOS의 주요 기능태스크 관리: 여러 개의 태스크를 생성하고 스케줄링태스크 간 통신: 큐(Queue), 세마포어(Semaphore), 뮤텍스(Mutex)를 사용하여 태스크 간 데이터를 주고받고 동기화타이머: 주기적으로 실행되는 타이머 기능2. 태스크 간 통신FreeRTOS에서 태스크 간 통신을 위해 큐(Queue)를 사용할 수 있습니다. 큐는 데이터를 FIFO(First In, First Out) 방식으로 저장하여, 한 태스크에서 .. 2024. 8. 1.
[C++ 마스터] Day 27: 최신 C++ 표준 (C++11, C++14, C++17, C++20) 기능 소개 C++11 기능C++11은 C++ 언어에 많은 중요한 기능을 도입했습니다. 주요 기능 중 일부를 살펴보겠습니다. 1. 자동 타입 추론 (auto)auto 키워드는 변수의 타입을 자동으로 추론합니다.#include #include using namespace std;int main() { auto x = 10; // int로 추론 auto y = 3.14; // double로 추론 auto z = "Hello, World!"; // const char*로 추론 cout  2. 람다 함수 (Lambda Functions)람다 함수는 익명 함수로, 함수 객체를 간단하게 정의할 수 있습니다.#include #include #include us.. 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 27: C++에서의 데이터베이스 연동 (SQLite, MySQL) SQLite 소개SQLite는 경량의 자체 포함형 SQL 데이터베이스 엔진입니다. 서버가 필요 없으며, 데이터베이스가 하나의 파일로 저장됩니다. SQLite는 임베디드 시스템 및 소형 애플리케이션에 적합합니다. SQLite 설치 및 설정SQLite 설치리눅스 환경에서 SQLite를 설치하려면 다음 명령어를 사용합니다.sudo apt-get install sqlite3 libsqlite3-dev SQLite와 C++ 연동SQLite와 C++을 연동하여 데이터베이스를 사용하려면 sqlite3.h 헤더 파일과 libsqlite3 라이브러리를 사용해야 합니다. 1. 데이터베이스 연결 및 테이블 생성다음 코드는 SQLite 데이터베이스에 연결하고, 테이블을 생성하는 예제입니다. sqlite_example.cpp#.. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조] Day 23: 깊이 우선 탐색 (DFS) 깊이 우선 탐색 (DFS, Depth-First Search)깊이 우선 탐색(DFS)은 그래프 탐색 알고리즘 중 하나로, 가능한 한 깊게 탐색한 후 더 이상 깊이 갈 수 없으면 다시 되돌아와 다른 경로를 탐색하는 방식입니다. DFS는 스택 자료구조를 사용하여 구현할 수 있으며, 재귀적으로도 구현이 가능합니다.DFS의 주요 특징:시간 복잡도: (O(V + E)), 여기서 (V)는 정점의 수, (E)는 간선의 수입니다.공간 복잡도: (O(V)), 재귀 호출 스택의 깊이입니다.DFS 구현그래프 구현 (인접 리스트 사용)#include #include #include // 그래프 클래스 정의class Graph {public: Graph(int vertices); void addEdge(int v, .. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조 심화] Day 23: 분할 상환 분석 (Amortized Analysis) 분할 상환 분석 (Amortized Analysis)분할 상환 분석은 알고리즘의 시간 복잡도를 분석하는 기법으로, 개별 연산의 최악의 경우 시간 복잡도가 아닌, 일련의 연산에 대한 평균 시간 복잡도를 계산하는 방법입니다. 이는 데이터 구조의 연산이 불균등하게 발생할 때 매우 유용합니다. 분할 상환 분석의 주요 기법에는 Aggregate Analysis, Accounting Method, Potential Method가 있습니다.Aggregate AnalysisAggregate Analysis는 전체 연산에 대해 총 비용을 계산하고, 이를 연산 수로 나누어 평균 비용을 구하는 방법입니다.Accounting MethodAccounting Method는 각 연산에 대해 가상의 "크레딧"을 할당하여 연산 비용을.. 2024. 8. 1.
[C++ 게임 개발 시리즈] Day 23: 3D 모델링과 텍스처링 3D 모델링과 텍스처링3D 모델링과 텍스처링은 게임에서 현실감 있는 그래픽을 표현하기 위해 필수적인 기술입니다. 3D 모델링은 객체의 형태를 정의하고, 텍스처링은 객체의 표면에 이미지를 입히는 작업입니다. 오늘은 간단한 3D 모델을 로드하고, 텍스처를 적용하는 방법을 학습하겠습니다.3D 모델 파일 형식3D 모델 파일 형식은 다양한 종류가 있습니다. 오늘은 간단하고 널리 사용되는 Wavefront OBJ 파일 형식을 사용하겠습니다. OBJ 파일은 3D 모델의 정점, 면, 텍스처 좌표 등을 텍스트 형식으로 저장합니다.OBJ 파일 로딩OBJ 파일을 로드하기 위해 간단한 로더를 작성합니다. 이 로더는 정점, 텍스처 좌표, 면 정보를 읽어들여 OpenGL에서 사용할 수 있는 형태로 변환합니다.#include #i.. 2024. 8. 1.
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 23: 프로젝트: 스마트 홈 시스템 구축 (2) 스마트 홈 시스템의 통합스마트 홈 시스템 구축 프로젝트의 두 번째 단계에서는 다양한 센서와 액추에이터를 통합하고, Wi-Fi를 통해 데이터를 송수신하는 방법을 학습합니다. 이를 통해 스마트 홈 시스템의 실제 동작을 구현합니다.1. 시스템 통합센서와 액추에이터를 통합하여 데이터를 수집하고 제어하는 코드를 작성합니다. 이 코드는 센서 데이터를 읽고, 특정 조건에 따라 액추에이터를 제어합니다. 예제: 센서 데이터 수집 및 액추에이터 제어다음 예제는 온도, 습도, 조도 데이터를 수집하고, 특정 조건에 따라 LED와 릴레이를 제어하는 방법을 보여줍니다.#include #include // Wi-Fi 설정const char* ssid = "your_SSID";const char* password = "your_PA.. 2024. 8. 1.
[C++ 마스터] Day 24: 프로젝트 - 간단한 콘솔 게임 만들기 (2) 이번 단계에서는 간단한 콘솔 게임 프로젝트를 완성하겠습니다. 어제는 미로 생성과 플레이어 이동을 구현했습니다. 오늘은 게임 루프를 추가하고 승리 조건을 구현하여 게임을 완성할 것입니다. 1. 게임 루프와 승리 조건 추가게임이 종료될 때까지 반복적으로 상태를 업데이트하고 화면을 출력하는 게임 루프를 추가합니다. 플레이어가 출구에 도달하면 게임이 종료됩니다. 코드 업데이트#include #include using namespace std;const int WIDTH = 10;const int HEIGHT = 10;vector> maze = { {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}, {'#', 'P', ' ', ' ', '#', ' ', ' ',.. 2024. 8. 1.
반응형