2024/10 52

Pain Point C++에서 델리게이트같은 함수 만들기

C++에서 델리게이트처럼 이용하려면? 던전 맵에 입장할 때, 카메라와 플레이어가 위에서 아래로 떨어지는 효과를 구현하기 위해, DungeonLevel 클래스는 던전 레벨로 전환하는 순간을 감지해야 한다. 이를 위해 DungeonLevel 클래스의 특정 함수를 외부에서 호출하는 방식으로 전환 시점을 처리할 수 있다. 이러한 구현을 위해 UE5에서 사용했던 델리게이트 방식이 떠올랐다. 이를 적용하기 위해 DelegateManager 클래스를 별도로 만들었다. 구현 방식 DungeonLevel의 EntranceDungeon 멤버 함수를 람다 표현식을 사용하여 DelegateManager에 바인딩했다. 이렇게 함으로써 델리게이트처럼 다른 클래스에서도 DungeonLevel의 함수를 호출할 수 있는 구조를 만들었..

힙은 다음과 같은 시간 복잡도를 만족해야 한다. O(1) : 최대 원소에 즉각적으로 접근할 수 있어야 한다.O(log N) : 원소 삽입에 대한 시간 복잡도O(log N) : 최대 원소 삭제에 대한 시간 복잡도 원소 삽입 또는 삭제에 대하 O(log N)의 시간 복잡도를 만족하기 위해 트리 구조를 사용해야 한다.이 경우 완전 이진 트리를 사용해야 한다.완전 이진 트리는 마지막 레벨의 노드를 제외하고 모두 두 개의 자식 노드가 있고,마지막 레벨에서는 왼쪽 부터 차례대로 노드가 있는 트리이다.  완전 이진 트리는 새로운 원소를 트리의 마지막 레벨에 추가하는 방식으로 구성할 수 있다.만약 마지막 레벨의 모든 노드가 채워져 있다면 새로운 레벨을 하나 더 만들고,맨 왼쪽에 위치에 노드를 추가한다.완전 이진 트리는..

시스템 프로그래밍이란?

시스템 프로그래밍의 목적은,컴퓨터 소프트웨어를 만드는 것이다.어떠한 서비스를 다른 소프트웨어에게 제공하는 것이다. 즉 정리하자면,컴퓨터 시스템의 운영을 위한 응용 소프트웨어를 실행시키기 위한 플랫폼이다. 그러면 유닉스 시스템 프로그래밍은유닉스에서 제공하는 시스템 호출을 이용해서 프로그램을 작성하는 것이다.시스템 호출은 유닉스 시스템이 제공하는 서비스를 프로그램에서 이용할 수 있도록지원하는 프로그래밍 인터페이스를 의미한다. 마찬가지로 시스템이 제공하는 서비스를 이라는 키워드 붙는다. 시스템 프로그래밍을 이해하려면다음과 같은 시스템 소프트웨어, 시스템 호출과 같은 의미를 이해해야한다. 시스템이란 무엇인가?시스템에는 가장 대표적으로 컴퓨터 시스템이 있다.이외에도 조금 더 확장해서 어떠한 연산을 지원하는 장치도..

프로그래머스 LV.2 기능 개발

https://school.programmers.co.kr/learn/courses/30/lessons/42586 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  현재 과정에서 + 속도가 100이 넘으면 dequeue에서 꺼내주는 방식으로 계속 돌리다가.다음 인덱스가 100이 넘지 않으면 자연스럽게 종료를 해주는 방식으로 구현했다. 이를 위해서 pair를 사용하여 구현하였다. 내가 짠 코드#include #include #include #include #include #include #includeusing namespace std;vector solution(vector progresses, vect..

Java와 C++의 차이로 배우는 소멸자와 const 멤버 함수

소멸자는 언제 호출되길래 소멸자라 부를까? 생성자가 언제 호출되는 지 기억하는가?오브젝트가 새로 만들어질 때이다.스택에 in place되거나 힙에 new로 할당 될 때이다.두 경우 모두 생성자가 호출된다. 그럼 소멸자는 이 객체가 지워질 때 호출된다.new 만든 객체가 delete로 지워질 때,스택에 만든 오브젝트면 스택에서 없어지면서 호출된다. 자바같은 경우에는 소멸자가 없다.없을 수 밖에 없는게 소멸자는 뭐 할 일이 없기 때문이다.C++는 소멸자가 있다.그 이유는 뭘까?C++는 메모리 관리를 스스로 해줘야한다.따라서 만약에 C++ 클래스 안에서 내가 메모리를 할당을 한 상황이라면내 오브젝트가 언제 지워지는 지 알아야그 안에서 할당한 메모리도 지울 수 있다.그 시기를 알기 위해서 사용하는 것이 소멸자이..

Java와 C++ 로 비교하는 - 초기화 리스트와 기본 생성자

대입의 개념과 초기화 리스트의 차이//Javaclass Vector{ public: vector() { //이건 대입 mX = 0; mY = 0 }}/C++class Vector{public : vector(); //이건 초기화 : mX(0),mY(0) {}}  실제 코드 상에서는 대입과 초기화 리스트가 차이가 없어보인다.근데 초기화 해야하는 이유는대입은 초기화가 된 이후에 실행되는 애이고,초기화 리스트는 실제 오브젝트가 만들어질 때 초기화하는 것이다. 초기화 리스트를 권장하는 이유는 다음과 같다.특히 멤버 변수를 대입 없이 초기화 할 수 있으며상수나 참조 변수도 초기화가 가능하다. 다음과 같이 const나 참조는 선언 이후에 대입할 수 ..

인공지능 - 길찾기 BFS

길 찾기 알고리즘은 두 지점의 경로상에 있는 장애물을 피해서 길을 찾는다.이 길 찾기의 복잡성은 두 점 사이에는 여러 다양한 경로 집합이 존재할 수 있다는 사실에 있다.하지만 이러한 경로 중 아주 적은 수의 경로만이 최단 경로이다.장애물의 표면을 따라 이동하는 AI는 지능적으로 보이지 않는다.그래서 최단 경로를 찾기 위해서 모든 가능한 경로를 효율적으로 탐색하기 위한 방법이 필요하다. 그래프 길 찾기 문제를 풀기 전에 먼저 AI가 통과할 수 있는 게임 세계의 부분을 표현하는 방법이 필요하다.일반적으로는 그래프 데이터 구조를 많이 선택한다.그래프는 일련의 노드를 포함한다. 이 노드는 에지를 통해서 서로 연결된다. 이 에지는 방향성이 없는 경우가 있는데방향성이 없다는 것은 양방향으로 이동할 수 있다는 걸 의..

그래픽스/OpenGL 2024.10.30

D3D11 Rasterization - Light

조명은 크게 3가지이다.Direction light, Point light, Spot light 이를 코드로 나타내면 다음과 같다.struct Light{ float3 Strength; float FalloffStart; // point/spot light only float3 Direction; // directional/spot light only float FalloffEnd; // point/spot light only float3 Position; // point light only float SpotPower; // spot light only};Directional light태양같이 아주 멀리 있는 광원을 가정한다.광원은 아주 멀리있다고 정의..

그래픽스/DX11 2024.10.30

물리 계층과 데이터 링크 계층 - 이더넷

물리 계층과 데이터 링크 계층은 통신이 이루어지는가장 근원적인 지점이다.하드웨어가 네트워크를 통해 메시지를 주고받고이해하는 방식은 대부분물리 계층과 데이터 링크 계층에 구현되어 있다.이더넷- 데이터 링크 계층과 물리 계층을 아우르는 기술인 이더넷 물리 계층과 데이터 링크 계층은 서로 밀접하게 연관되어 있다.오늘날의 두 계층은 이더넷이라는 공통된 기술이 사용되기 때문이다. 이더넷은 현대 LAN, 특히 유선 LAN 환경에서 가장 대중적으로 사용되는 기술이다.예를 들어서 두 대의 컴퓨터가 있다고 가정해보겠다.이 컴퓨터끼리 정보를 주고받으려면 가장 먼저 케이블과 같은 통신 매체가 필요하다.그리고 그 통신 매체를 통해 정보를 송수신하는 방법이 정해져 있어야 한다. 이더넷은 다양한 통신 매체의 규격들과 송수신되는 ..

트리를 이용한 파일 시스템 자료 구조 만들기

1. FileSystemDataStrcut.h에 필요한 헤더 파일을 포함한다.#pragma once#include #include #include  2. 디렉터리/파일 정보를 저장할 노드 구조체를 작성한다.// 파일 시스템의 노드를 나타내는 구조체 정의typedef struct nArrNode {    string name;  // 파일 또는 디렉토리의 이름    bool isDir;  // 이 노드가 디렉토리인지 여부 (true: 디렉토리, false: 파일)    vector children;  // 자식 노드들을 가리키는 포인터들의 벡터 (파일 또는 서브디렉토리)} nArrNode; 3. 사용하기 편하도록 nArrNode를 사용하여 트리를 구성한다.그리고 현재 디렉터리를 저장할 변수를 추가한다. s..