반응형 [C++ 성능 최적화 및 고급 테크닉] Day 17: 병렬 알고리즘과 std::async 병렬 알고리즘의 중요성병렬 알고리즘은 여러 작업을 동시에 수행하여 프로그램의 성능을 극대화하는 데 도움을 줍니다. C++17에서는 표준 라이브러리에 병렬 알고리즘을 도입하여, 쉽게 병렬 처리를 구현할 수 있습니다. 병렬 알고리즘C++17 표준 라이브러리에서는 병렬 알고리즘을 지원하기 위해 std::execution 네임스페이스를 도입했습니다. 이를 통해 기존 알고리즘을 병렬로 실행할 수 있습니다. std::execution 정책seq: 순차적으로 실행par: 병렬로 실행par_unseq: 병렬로 실행하고, 실행 순서는 정의되지 않음 예제 코드병렬 정렬#include #include #include #include int main() { std::vector vec = {5, 2, 9, 1, 5, 6.. 2024. 8. 1. [C++ 네트크 프로그래밍] Day 17: 네트워크 보안 기초 (SSL/TLS) 네트워크 보안 기초 (SSL/TLS)SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 네트워크 통신을 보호하기 위한 프로토콜입니다. SSL은 초기 버전이고, TLS는 SSL의 업그레이드 버전입니다. 이들은 데이터를 암호화하여 중간에서 도청하거나 변조하지 못하도록 보호합니다.SSL/TLS의 주요 기능암호화: 전송되는 데이터를 암호화하여 보호합니다.무결성: 데이터가 전송 중에 변조되지 않도록 합니다.인증: 서버와 클라이언트의 신원을 확인하여 신뢰할 수 있는 통신을 보장합니다.SSL/TLS의 주요 구성 요소공개 키 암호화: 데이터 암호화에 사용되는 두 개의 키(공개 키와 비밀 키)를 이용한 암호화 방식입니다.대칭 키 암호화: 동일한 키로 데이터를 암호화하고.. 2024. 8. 1. [C++로 배우는 알고리즘과 자료구조] Day 17: 삽입 정렬과 쉘 정렬 삽입 정렬 (Insertion Sort)삽입 정렬은 배열의 요소를 하나씩 정렬된 부분에 삽입하는 방식으로 동작합니다. 각 요소를 적절한 위치에 삽입하기 위해 이미 정렬된 부분을 오른쪽으로 이동시킵니다.삽입 정렬의 시간 복잡도:최선의 경우: (O(n))평균의 경우: (O(n^2))최악의 경우: (O(n^2))삽입 정렬 구현#include #include // 삽입 정렬 함수void insertionSort(std::vector& arr) { int n = arr.size(); for (int i = 1; i = 0 && arr[j] > key) { arr[j + 1] = arr[j]; // 정렬된 부분에서 키보다 큰 요소 이동 --j; } .. 2024. 8. 1. [C++로 배우는 알고리즘과 자료구조 심화] Day 17: 비트마스크 동적 계획법 (Bitmask DP) 비트마스크 동적 계획법 (Bitmask DP)비트마스크 동적 계획법은 상태를 이진수로 표현하여 여러 상태를 효율적으로 관리하는 기법입니다. 주로 부분 집합 문제나 조합 최적화 문제에 사용됩니다. 상태를 이진수로 표현하면 각 비트가 특정 원소의 포함 여부를 나타내어 간결하게 표현할 수 있습니다.문제 예시: 외판원 문제 (Traveling Salesman Problem, TSP)외판원 문제는 주어진 도시들을 방문하여 모든 도시를 한 번씩 방문하고 시작점으로 돌아올 때, 이동 비용의 합이 최소가 되도록 하는 경로를 찾는 문제입니다. 비트마스크 DP를 사용하여 해결할 수 있습니다.문제 정의주어진 도시 수 (n)각 도시 간의 거리 (dist[i][j])최소 이동 비용을 계산하여 출력비트마스크 DP 구현다음은 C+.. 2024. 8. 1. [C++ 게임 개발 시리즈] Day 17: 게임 상태 관리 게임 상태 관리게임 상태 관리는 게임이 다양한 상태(예: 메인 메뉴, 게임 플레이, 일시 정지, 게임 오버 등)를 가질 수 있도록 하는 중요한 개념입니다. 상태 패턴(State Pattern)을 사용하여 이러한 상태 전환을 관리할 수 있습니다.상태 패턴(State Pattern)상태 패턴은 객체의 상태에 따라 다른 동작을 수행하도록 하는 디자인 패턴입니다. 이를 통해 상태 전환을 간단하고 명확하게 관리할 수 있습니다.게임 상태 인터페이스 정의먼저, 게임 상태 인터페이스를 정의합니다. 이 인터페이스는 각 상태에서 필요한 공통 메서드를 선언합니다.class GameState {public: virtual ~GameState() {} virtual void handleEvent(sf::Event& .. 2024. 8. 1. [C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 14: 디자인 패턴 심화 - 템플릿 메소드 패턴 (Template Method Pattern) 템플릿 메소드 패턴 (Template Method Pattern)템플릿 메소드 패턴은 상위 클래스에서 알고리즘의 골격을 정의하고, 하위 클래스에서 그 알고리즘의 일부 단계를 구체적으로 구현하도록 하는 패턴입니다. 이를 통해 알고리즘의 구조는 변경하지 않고, 세부 단계를 변경할 수 있습니다. 템플릿 메소드 패턴의 특징알고리즘의 골격 정의: 알고리즘의 기본 구조를 상위 클래스에서 정의합니다.단계의 구체적 구현: 알고리즘의 세부 단계를 하위 클래스에서 구현합니다.코드 재사용: 중복 코드를 상위 클래스에 모아서 코드 재사용성을 높입니다.템플릿 메소드 패턴의 구조AbstractClass (추상 클래스): 알고리즘의 골격을 정의하고, 구체적 단계를 하위 클래스에서 구현하도록 합니다.ConcreteClass (구체적.. 2024. 8. 1. [C++ 성능 최적화 및 고급 테크닉] Day 14: CRTP (Curiously Recurring Template Pattern) 사용법 CRTP란?CRTP(Curiously Recurring Template Pattern)는 C++ 템플릿 메타프로그래밍 기법 중 하나로, 기본 클래스가 자신을 상속하는 파생 클래스를 템플릿 매개변수로 받는 패턴입니다. 이를 통해 코드 재사용성과 컴파일 시간 다형성을 구현할 수 있습니다.CRTP의 기본 구조CRTP의 기본 구조는 다음과 같습니다:template class Base {public: void interface() { static_cast(this)->implementation(); } void implementation() { std::cout {public: void implementation() { std::cout 위 코드에서 .. 2024. 8. 1. [C++ 네트워크 프로그래밍] Day 14: 웹 소켓 서버 개발 웹 소켓(WebSocket) 서버 개발웹 소켓 서버는 클라이언트와의 양방향 실시간 통신을 위해 웹 소켓 연결을 설정하고, 데이터를 송수신하는 프로그램입니다. 웹 소켓 서버는 주로 실시간 데이터 스트리밍, 채팅 애플리케이션 등에서 사용됩니다.웹 소켓 서버의 주요 기능연결 수락: 클라이언트의 웹 소켓 연결을 수락합니다.데이터 송신: 클라이언트로 데이터를 전송합니다.데이터 수신: 클라이언트로부터 데이터를 수신합니다.연결 종료: 클라이언트와의 웹 소켓 연결을 종료합니다.Boost.Beast를 이용한 웹 소켓 서버 구현Boost.Beast는 HTTP 및 웹 소켓 프로토콜을 지원하는 라이브러리로, Boost.Asio를 기반으로 합니다. Boost.Beast를 사용하여 간단한 웹 소켓 서버를 구현할 수 있습니다.웹 .. 2024. 8. 1. [C++로 배우는 알고리즘과 자료구조 ] Day 14: 해시 함수와 충돌 해결 기법 해시 함수 (Hash Function)해시 함수는 임의의 크기를 가진 데이터를 고정된 크기의 해시 값으로 변환하는 함수입니다. 해시 테이블에서 해시 함수는 주어진 키를 인덱스로 변환하여 데이터의 저장 및 검색을 효율적으로 수행합니다.해시 함수의 특성:결정적 (Deterministic): 동일한 입력에 대해 항상 동일한 해시 값을 반환해야 합니다.균등 분포 (Uniform Distribution): 해시 값이 가능한 고르게 분포되어야 합니다.빠른 계산 (Fast Computation): 해시 값을 빠르게 계산할 수 있어야 합니다.충돌 해결 기법 (Collision Resolution)해시 테이블에서 두 개 이상의 키가 동일한 해시 값을 가지는 경우를 충돌(Collision)이라고 합니다. 충돌을 해결하기 .. 2024. 8. 1. [C++로 배우는 알고리즘과 자료구조 심화] Day 14: 중국인의 나머지 정리 (Chinese Remainder Theorem) 중국인의 나머지 정리 (Chinese Remainder Theorem, CRT)중국인의 나머지 정리(CRT)는 서로 다른 소수들의 모듈러 시스템에서 주어진 나머지 값을 갖는 수를 찾는 방법입니다. CRT는 정수론과 암호학, 병렬 컴퓨팅 등 여러 분야에서 활용됩니다.중국인의 나머지 정리다음은 중국인의 나머지 정리의 기본 공식입니다:주어진 서로 다른 정수 (n_1, n_2, \ldots, n_k)가 서로소(즉, (\gcd(n_i, n_j) = 1), (i \ne j))일 때, 다음과 같은 동시 합동식 시스템을 만족하는 유일한 정수 (x)가 존재합니다: [\begin{cases}x \equiv a_1 \pmod{n_1} \x \equiv a_2 \pmod{n_2} \\vdots \x \equiv a_k \pm.. 2024. 8. 1. 이전 1 ··· 38 39 40 41 42 43 44 ··· 61 다음 반응형