일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 티스토리챌린지
- C++
- UnrealEngine4
- 2294
- 오블완
- 언리얼엔진5
- Frustum
- 프로그래머스
- const
- UE5
- baekjoon
- softeer
- IFileDialog
- GeeksForGeeks
- 1563
- DirectX11
- winapi
- 줄 세우기
- algorithm
- 팰린드롬 만들기
- 백준
- RVO
- Unreal Engine5
- C
- RootMotion
- UnrealEngine5
- directx
- NRVO
- DeferredRendering
- Programmers
- Today
- Total
목록전체 글 (723)
Game Develop
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dPbDEO/btrRyU2T3Le/wVt5dYKn011d4B1SwTpvL1/img.png)
알다시피 문자열의 끝은 반드시 \0이 있어야한다. 그렇기 때문에 어떠한 문자열을 저장하는 char 배열을 선언할 경우, 반드시 문자의 개수보다 1개 더 크게 잡아야한다. maxlevel 은 8글자이지만, 배열의 크기는 최소 9로 잡아줘야한다. char cArray[9] = "maxlevel"; 문자개수와 똑같은 크기인 8로 선언할 경우, 컴파일에러가 발생한다. 컴파일시점에서 반드시 문자열의 끝에는 \n이 있어야한다고 보장해줘야한다는 의미이다. 만약, maxlevel이라는 문자열의 앞 3글자 max를 low로 바꿔서 최종적으로 lowlevel이라는 문자열을 만드는게 목적이라면, 아래와 같이해야한다. char a1[9] = "maxlevel"; char a2[] = "low"; memcpy(a1, a2, s..
1. STL의 end()멤버함수는 마지막원소 다음의 주소를 가리키고있다. 해당 주소를 역참조하면 쓰레기값이 들어있으며, 애초에 역참조하려 하면 에러를 띄운다. 마지막 원소를 얻고싶으면 아래와 같이한다. vector v = {0,1,2,3,4,5}; // 예시 컨테이너는 이걸로 계속 사용. int lastElement = *(--v.end()); // end()는 마지막의 다음 주소이기때문에 --연산. 2. erase(iter)를 할 경우, iter를 포함해서 그 이후의 iterator들의 값들은 다 유효하지 않다. (매우중요) 때문에 역참조를 할 경우 에러가 발생하며, iter이전의 값들에 대해서만 역참조가 가능하다. (굳이 하려한다면) erase()의 리턴값은 iterator이며, iter을 삭제한 후..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/HzBiL/btrQa4qLu5t/Q3gAICmNWyDvuXV3cvkat1/img.png)
STL 컨테이너들은 내부적으로 Iterator가 있다. 컨테이너에 있는 원소들을 탐색하기 위한 포인터같은 객체로써, 각각의 컨테이너들은 탐색하는 방식(알고리즘)이 다르기 때문에 Iterator도 여러 종류가 있다. 입력 반복자 (input iterator) : 읽기만 가능, 순방향 이동, 현 위치의 원소를 한 번만 읽을 수 있는 반복자 출력 반복자 (output iterator) : 쓰기만 가능, 순방향 이동, 현 위치의 원소를 한 번만 쓸 수 있는 반복자 순방향 반복자 (forward iterator) : 읽기/쓰기 모두 가능, 순방향 이동(++)이 가능한 재할당될 수 있는 반복자 양방향 반복자 (bidirectional iterator) : 읽기/쓰기 모두 가능, 순/역 방향 이동(--)이 가능한 반..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/edm6bU/btrP9ftgNUK/U2K2HuKUb0lxwsJLIfuI3K/img.png)
vector의 멤버함수 capacity는, 현재 메모리의 재할당없이 몇개의 원소를 집어 넣을 수 있느냐를 알려주고, size()는 실제로 원소가 몇개 들어가있는지를 알려준다. capacity이상으로 원소를 집어넣으려 할 경우 내부적으로 메모리의 재할당이 이루어진다. 재할당 크기는 약 1.5배이다. capacity가 늘어난 이후에는 원소를 삭제하더라도 capacity가 줄어들지는 않는다. vector의 원소를 얻으려할 때 []연산자와 at연산자를 사용하는 방법이 있다. []연산자는 범위검사를 하지않고, at연산자는 범위검사를 한다. 이런게 으레 그렇듯, 범위검사를 하는 at보다는 그냥 []이 조금 더 빠르긴 하다.
선택정렬 (Selection Sort) i가 기준, j가 두번째 포문일 시, i는 당연 처음부터 돌리고 j는 i부터 돌린다. 자기자신도 비교에 포함해야됨. 어쨌든 i기준 잡고 j돌리면서 최소값과 해당 값의 인덱스를 저장해놓고, 반복문 끝낸후에 i랑 최소값이랑 스왑해주면 된다. 시간복잡도는 O(n^2). 매 카운트마다 n-1번의 비교를위한 반복문을 돌려야 하기 때문 삽입정렬 (Insertion Sort) 최선의 성능 : O(n) -> 스왑같은거 없이 비교만할 떄, 즉 값이 거의 정렬된상태로 들어왔을 때. 최악의 성능 : O(n^2) -> 아예 역순으로 배열이 인풋으로 왓을 때. 비교도 n^2번해야하고 스왑도 n^2번 해야한다. 즉, O(n^2). 물론 다른것들에 비해 '무조건'해야하는건 아니기 때문에 실제..
https://www.acmicpc.net/problem/1914 1914번: 하노이 탑 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 void recur(int from, int to, int bypass, int n) { if (n == 1) // 옮길게 한개면 그냥 그대로 옮기면됨. { cout
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bUbh94/btrPPLsWf6S/i9KLBSAY81EJPKyhkSpPz1/img.png)
그냥 map[i] = 1; 이런식으로 []연산자만 이용했었다. 그런데 insert를 사용하면 성능이 약간 더 좋고, 이미 해당 key값이 들어가 있는지 아닌지 판별할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); map visit; visit.insert({ 'a',500 }); visit.insert({ 'b',300 }); pair returnedValue = visit.insert({ 'a',200 }); if (!returnedValue.second) // a라는 키값이 이미 있기에 false를 리턴. { cout
https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 int paper[2200][2200]; map countMap; void recu..