분류 전체보기

    RAII (Resource Acquisition Is Initialization)

    RAII는 Resource acquisition is initialization의 약자로 C++설계 패턴중 하나인 키워드이며 흭득된 자원을 초기화 한다. 동적인 프로그래밍을 위해 new라는 키워드를 사용해 힙 메모리에서 할당받는다. 할당 받는순간 해당 메모리의 resource를 프로그래머는 직접 관리하게 된다. 예기치 못한 exception등... 다양한 이유로 인해 할당받은 메모리를 해제하지 못하고 Memory leak이 발생하게 된다. 뿐만 아니라 mutex의 lock에서도 발생할 수 있다. 이러한 문제들을 안전하게 관리하고자 만든 것들이 unique_ptr, shared_ptr, lock_guard 등...이 있다. 해당 클래스들은 함수가 끝나면, {}(중괄호)에서 벗어 난다면.... finally..

    C++ 문자열 공백 제거하는 방법

    #include #include #include #include #include #include #include #include using namespace std; int main() { string str = "Hello World!"; string str2 = str, str3 = str; cout

    시간 복잡도 (Time Complexity)와 공간 복잡도 (Space Complexity)

    알고리즘 성능 평가 평가하기 위해 '복잡도(Complexity)'의 척도를 사용한다. 그중 시간 복잡도와 공간 복잡도의 개념이 나오며, 동일한 기능을 수행하는 알고리즘이 있을 때 복잡도가 낮을 수록 좋은 알고리즘이라 말한다고 한다. 시간 복잡도: 특정한 크기의 입력에 대하여 알고리즘의 수행 시간 분석 공간 복잡도: 특정한 크기의 입력에 대하여 알고리즘의 메모리 사용량 분석 1. 시간 복잡도 시간 복잡도는 특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간을 의미한다. 같은 결과를 갖는 프로그래밍 소스도 작성 방법에 따라 걸리는 시간이 달라지며, 같은 결과를 같는 소스라면 시간이 적게 걸리는 것이 좋은 소스다. 빅-오 표기법 예를 들어, 동전을 튕겨 뒷면이 나올 확률을 이야기 할 때 운이 좋으면 1번에 뒷..

    [실1] 14888 - 연산자 끼워넣기

    #include using namespace std; #define OPERATOR_COUNT 4 int n; int arr_operand[1000]; // 수열 int arr_operator[OPERATOR_COUNT]; int min_val = INT_MAX; int max_val = INT_MIN; void DFS(int result, int idx) { if (idx == n) { if (result > max_val) max_val = result; if (result 0) { arr_operator[i]--; ..

    [Unity] 메인&UI 카메라 2개 동시에 설정

    카메라를 설정하기 위해선 UI 카메라가 메인 카메라보다 앞으로 와야한다. 3D로 카메라 전환 후 비교. 캔버스를 카메라 모드로 전환한 후 UI 카메라를 붙여야한다. 하지만, 문제점이 발생 할 수가 있다 예로 들어서 메인 카메라에서 오브젝트를 렌더링 할 시 UI와 같이 표현하고자 할텐데 UI 카메라가 비추는 깊이와 사물 (오브젝트) 를 제한둬야한다, UI 카메라를 오직 UI만 그리고 깊이 0으로 설정하고 메인 카메라를 -1로 설정한다. (수가 작을 수록 뒤로 감)

    C# static (정적) 메서드와 클래스

    1. C# static 메서드 정적(Static) 메서드는 인스턴스 메서드와는 달리 클래스로부터 객체를 생성하지 않고 직접 [클래스명.메서드명] 형식으로 호출하는 메서드이다. 이 메서드는 메서드 앞에 static 이라는 C# 키워드를 적어 주며, 메서드 내부에서 클래스의 인스턴스 객체 멤버를 참조해서는 안된다. 이 static 메서드는 인스턴스 객체로부터 호출될 수 없으며, 반드시 클래스명과 함께 사용된다. 2. C# static 속성, 필드 정적(Static) 속성 및 필드는 위의 static 메서드와 같이 [클래스명.속성명]과 같이 사용하며, 다음 예와 같이 static을 앞에 붙여 정의한다. 클래스 내의 Non-static 필드들은 클래스 인스턴트를 생성할 때마다 메모리에 매번 새로 생성되게 되는 ..

    [DX11 물방울책] 챕터3 - 트랜스폼 (위치값,회전값,크기값)

    1. 크기값 (Scale) 행렬 표현식은 아래와 같다. 예시2 2. 회전값 (Rotation) 예시 -30도만큼 회전 3. 동차 좌표 (homogeneous coordinate) Homogeneous 좌표는 쉽게 말하면 (x, y)를 (x, y, 1)로 표현하는 것. 임의의 0이 아닌 상수 w에 대해 (x, y)를 (wx, wy, w) 즉, homogeneous 좌표계에서 스케일(scale)은 무시되며 (x, y)에 대한 homogeneous 좌표 표현은 무한히 많이 존재하게 된다. 마찬가지로, 3차원의 경우에는 (X, Y, Z)를 (X, Y, Z, 1) 나 (wX, wY, wZ, w)로 표현. Homogeneous 좌표가 활용되는 곳은 주로 컴퓨터 그래픽스(graphics) 쪽이나 3D 비전 쪽이다. ..

    [DX11 물방울책] 챕터 2 - 행렬

    1. 행렬의 정의 그래픽스에선 행렬은 주로 트랜스폼 (이동,회전,크기) 그리고 벡터 위치를 프레임간 옮기고자 할 때 쓰여진다. m * n 행렬은 네모 모양의 m열 n행의 2차원 배열이다. 각 숫자를 원소라고 불린다. 각 행을 벡터로 취급할 때도 있다 2. 행렬간 곱셈 A 행렬의 행 개수와 B 행렬의 열 개수가 일치해야 연산이 가능하다. 3. 벡터와 행렬간 곱셈 4. 선형 결합 벡터 행렬 곱셈간 결과 uA는 선형 결합과 똑같다고 한다. 5. 결합 법칙 A(B + C) = AB + AC 그리고 (A + B)C = AC + BC 6. 전치 행렬 행렬의 행과 열을 교환해서 구한다. 전치 행렬의 속성은 다음과 같다. 7. 단위 행렬 좌>우측으로 대각선으로 가는 원소들 제외하고 모든 원소가 0인 행렬을 칭한다. 8..

    C++ virtual 다중 상속, 가상 부모 클래스

    다중 상속을 할 시 예상치 못하게 클래스가 중복될 가능성이 있다. class A { public: int a; }; class B : public A { public: int b; }; class C : public A { public: int c; }; class D : public B, public C { public: int d; }; A 클래스를 B, C 클래스가 상속받고 B, C 클래스를 D클래스가 상속받는 구조다. 문제는 이와같은 구조로 상속받을 때 A클래스의 내용물이 중복이 된다 하지만 중복되는 걸 희망하지 않을 때는 virtual 상속을 사용하면 된다. 클래스를 상속받을 때 상속받는 클래스에 virtual 을 앞에 붙여주면 된다 그렇게 되면, B, C 클래스를 상속받는 경우 B, C 클래스..

    [DX11 물방울책] 챕터 1 - 벡터

    벡터는 게임 그래픽스에서 아주 중요한 역할을 하고있다. 예) 충돌 처리 그리고 물리 작용. 1. 벡터란 무엇인가? 크기와 방향을 지닌 값이다. 예시는 아래와 같다. 강체 : 힘 위치 속도 : 가속도와 방향 2. 벡터와 좌표계 벡터를 좌표계로 표현할려면 현재 공간상 위치값을 치환하면 된다. 예) 3D (x, y, z), 2D (x,y) 두 프레임 즉 시점에 따라 같은 방향이어도 위치가 다를 수가 있다. 3. 왼손 좌표계 vs 오른손 좌표계 Direct3D는 왼손 좌표계를 사용한다. 4. 기본 벡터 연산 두 벡터는 모든 좌표가 일치해야 똑같다라고 할 수가 있다. 두 벡터간 덧셈은 오직 같은 좌표로만 진행한다. 스칼라곱 같은 경우엔 자연수를 각 좌표를 곱해야한다 (형태 유지). 두 벡터간 뺄셈은 (왼쪽 벡터 ..