일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UELOG
- UE4 커스텀로그
- 약참조
- map
- 정렬
- 자료구조
- moreeffectiveC++
- UE_LOG
- dataasset
- 강참조
- 언리얼가비지컬렉터
- 람다
- C++
- 정렬알고리즘
- BFS
- 스마트포인터
- 선택정렬
- 람다사용정렬
- 데이터애셋
- 알고리즘
- stl
- 크리티컬섹션
- 프로그래머스
- C++최적화
- unorder_map
- UML관련
- enumasByue
- 애셋로드
- 언리얼엔진구조체
- 델리게이트
- Today
- Total
목록Note (423)
기억을 위한 기록들
www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net #include #include #include #include using namespace std; bool compare(string a, string b) { if (a.length() == b.length()) { return a > n; string input; vector arr;..
www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하고자하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net #include #include #include #include using namespace std; int main() { string n; cin >> n; unique_ptr arr = make_unique(n.size()); for (int i = 0; i < n.size(); i++) { arr[i] = n[i]-'0'; } int curIndex = 0; for (int i = 0; i < n.size(); i++) { curIndex = i; for (int j = i + 1; j < ..
이전에 공유 포인터의 서로 공유하면서 해제되지 않는 순환 참조가 발생하면서, 그것을 해결해주게 도와주는것이 weakptr 약한 포인터이다. 약한 포인터에는 공유 포인터의 강한참조외에 약한 참조가 존재하는데, 약한참조란? - 원시 포인터 해제에 영향을 끼치지 않음. - 약한 참조 카운트는 약한 참조의 수를 저장하는데 사용. - 약한 참조로 참조되는 개체는 강한 참조 카운트가 0이 될때, 소멸됨. - 순환 참조 문제의 해결책 * 공유 포인터에서부터 약한 포인터를 만든다. #include #include "Person.h" int main() { std::shared_ptr owner = std::make_shared("LaLa"); //강한참조 std::weak_ptr weakOwner = owner; //..
shared_ptr 공유포인터로 이전에 유니크 포인터와 달리 원시포인터를 독차지 하지 않고 여럿이서 공유 할 수있다. 몇명(?)이서 공유하는지 확인하기 위해 참조카운팅 기반으로 작동이 된다. 참조 카운팅이란 이전에 작성한 글이 있다. 사용예를 보면, #include #include "myVector.h" int main() { std::shared_ptr vector01 = std::make_shared(10.f, 30.f); // ... } 위와같이 생성하면 1 강한 참조 (1 strong ref)가 표시되는걸 확인할 수 있다. shared_ptr 내부 - 두개의 포인터를 소유 1. 데이터(원시 포인터)를 가리키는 포인터 2. 제어 블록을 가리키는 포인터(참조카운팅용) - 유니크 포인터와 달리 shar..
가비지 컬렉터는? - 메모리 누수를 막으려는 시도를 해준다. - 주기적으로 컬렉션을 실행. - 충분한 여유 메모리가 없을 때 컬렉션이 실행됨 (스케쥴에 따라 또는 수동으로도 실행가능) - 매 주기마다,GC는 루트("root")를 확인함 1. 전역변수 2. 스택 3. 레지스터 - 힙에 있는 개체에 루트를 통해 접근할 수 있는지 판단 - 접근할 수 없다면, 가비지로 간주해서 해제 문제점? - 사용되지 않는 메모리를 즉시 정리하지 않음. - GC가 메모리를 해제해야 하는지 판단하는 동안 애플리케이션이 멈추거나 버벅일 수 있음. 참조 카운팅? - 가비지컬렉션처럼, 개체에 대한 참조가 없을 때 개체가 해제됨. - 언제든 참조 횟수를 활용해서 특정 개체가 몇 번이나 참조되고 있는지 판단 가능 - 어떤 개체 A를 다..
www.acmicpc.net/problem/2210 2210번: 숫자판 점프 111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, 212121 이 가능한 경우들이다. www.acmicpc.net #include using namespace std; int map[6][6]; int dir[4][2] = { {-1,0} ,{0,1} ,{1,0} ,{0,-1} }; int check[1000000]; int result; void dfs(int x, int y, int sum, int depth) { if (depth == 5) { if (check[sum] ==..
www.acmicpc.net/problem/18238 18238번: ZOAC 2 2019년 12월, 두 번째로 개최된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다. 작년 ZOAC의 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로운 규칙을 고안해 www.acmicpc.net #include #include #include using namespace std; int main() { string n; int curCnt = 0; int curCnt2 = 0; int result = 0; char curLocation = 'A'; cin >> n; for (int i = 0; i < n.size(); i++) { curCnt = abs(n[i] - curLocation..
www.acmicpc.net/problem/2810 2810번: 컵홀더 첫째 줄에 좌석의 수 N이 주어진다. (1 ≤ N ≤ 50) 둘째 줄에는 좌석의 정보가 주어진다. www.acmicpc.net #include #include #include using namespace std; int main() { int n; cin >> n; string input; cin >> input; int cnt = 1; //컵홀더 1개 깔고 시작 int i = 0; while(i < input.size()) { if (input[i] == 'S') //싱글 의자 { cnt++; i++; } else { cnt++; i += 2; } } cout
www.acmicpc.net/problem/2670 2670번: 연속부분최대곱 첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어지며, 0.0보다 크거나 www.acmicpc.net #include #include using namespace std; int main() { int n; cin >> n; double arr[10001] = { 0.f }; double dp[10001] = { 0.f }; for (int i = 1; i > arr[i]; } dp[1] = arr[1]; double result = -1; for (int i = 2; i
www.acmicpc.net/problem/9655 9655번: 돌 게임 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. www.acmicpc.net #include #include using namespace std; int main() { int n; cin >> n; if (n % 2 == 0) { cout
www.acmicpc.net/problem/13301 13301번: 타일 장식물 대구 달성공원에 놀러 온 지수는 최근에 새로 만든 타일 장식물을 보게 되었다. 타일 장식물은 정사각형 타일을 붙여 만든 형태였는데, 한 변이 1인 정사각형 타일부터 시작하여 마치 앵무조개 www.acmicpc.net #include #include using namespace std; int main() { int n; cin >> n; long long dp[81] = { 0 }; dp[1] = 4; dp[2] = 6; dp[3] = 10; dp[4] = 16; for (int i = 5; i
스마트 포인터는 3가지가 있다. - unique_ptr (유니크) - shared_ptr (쉐어드) - weak_ptr (위크) 우선 일반 포인터를 보면 //... int main() { Vector* myVector = new Vector(10.f, 30.f); //... delete myVector; return 0; } 이런식으로 delete를 해줘야 한다. 그러나 //... int main() { Vector* myVector = new Vector(10.f, 30.f); if(true) { return 0; //early return } delete myVector; return 0; } 중간에 끝나버리거나(try catch와 같은), delete을 잊으면 메모리 누수(memory leak)가 ..