[자료구조] 더블 링크드 리스트(Doubly Linked List) (C++)
2020. 9. 29. 11:44
자료구조, 알고리즘
개념 링크드 리스트의 탐색 기능을 개선한 자료구조이다. 양방향으로 탐색이 가능하다. 코드 자체는 링크드 리스트와 크게 다른 게 없다. 삽입, 삭제 시 양방향인 것만 신경 쓰면 된다. template struct Node { T data;// 데이터 Node* prevNode;// 이전 노드를 가리키는 포인터 Node* nextNode;// 다음 노드를 가리키는 포인터 Node(T value) : data(value), prevNode(NULL), nextNode(NULL) {} }; template class DoublyLinkedList { Node* head; Node* tail; int size = 0; public: DoublyLinkedList() : head(NULL), tail(NULL) {..
[TIL] 2020-09-28
2020. 9. 28. 23:26
TIL(Today I Learned)
메시지와 브로드캐스팅 MonoBehaviour 1. 컴포넌트로써 게임 오브젝트에게 추가될 수 있다. 2. 유니티의 통제를 받는다. 3. 유니티 이벤트 메시지를 감지할 수 있게 된다. 유니티 엔진은 컴포넌트의 초기화 메소드 등... 메시지에 담아서 브로드캐스팅한다. 메시지 1. 보내는 쪽은 누가 받는지 신경 쓰지 않는다. 2. 받는 쪽은 누가 보냈는지 신경 쓰지 않는다. 3. 메시지에 명시된 기능을 가지고 있으면 실행, 없으면 무시한다. 브로드캐스팅: 메시지를 무차별적으로 많이 보내는 것 => 복잡한 참조 관계를 끊고 라이프 사이클을 스스로 관리할 수 있게 한다.
[알고리즘 문제] 37. Least Recently Used(카카오 캐시 문제 변형)
2020. 9. 28. 13:48
문제 풀이/알고리즘 문제풀이
코드 #include #include #include using namespace std; int main(void) { int s, n, i, j, temp, idx; cin >> s; cin >> n; vector vSize(s); vector vNumber(n); for (i = 0; i > vNumber[i]; idx = 0; temp = 0; for (j = 0; j < s; ++j) { if (vNumber[i] != vSize[j]) continue; idx = j; temp = vSize[j]; break; } // 현재 vSize에 있는지 체크, 해당 인덱스 가지고 있어야 함 if(idx != 0) { // 맨앞으로 꺼내오기 for (j = idx - 1; ..
[알고리즘 문제] 36. 삽입정렬
2020. 9. 28. 13:32
문제 풀이/알고리즘 문제풀이
코드 #include #include #include using namespace std; int main(void) { int n, i, j, temp; cin >> n; vector vInt(n); for (i = 0; i > vInt[i]; for (i = 1; i = 0; --j) { if (vInt[j] > temp) { vInt[j + 1] = vInt[j]; } else break; } vInt[j + 1] = temp; } for (i = 0; i < n; ++i) cout
[알고리즘 문제] 35. Special Sort(구글 인터뷰)
2020. 9. 28. 13:19
문제 풀이/알고리즘 문제풀이
코드 #include #include #include using namespace std; int main(void) { int n, i, j, temp; cin >> n; vector vInt(n); for (i = 0; i > vInt[i]; for (i = n - 1; i >= 0; --i) { for (j = 0; j 0 && vInt[j + 1] < 0) { temp = vInt[j]; vInt[j] = vInt[j + 1]; vInt[j + 1] = temp; } } } for (i = 0; i < n; ++i) cout
[알고리즘 문제] 34. 버블정렬
2020. 9. 28. 13:12
문제 풀이/알고리즘 문제풀이
코드 #include #include #include using namespace std; int main(void) { int n, i, j, temp; cin >> n; vector vInt(n); for (i = 0; i > vInt[i]; for (i = n - 1; i >= 0; --i) { for(j = 0; j vInt[j+1]) { temp = vInt[j]; vInt[j] = vInt[j + 1]; vInt[j + 1] = temp; } } } for (i = 0; i < n; ++i) cout
[TIL] 2020-09-27
2020. 9. 27. 23:24
TIL(Today I Learned)
미니 RPG tag를 사용하면 오브젝트를 손쉽게 찾을 수 있다. magnitude를 사용할 경우, 루트 값을 적용하기 때문에 조금 느릴 수 있다. 따라서 성능 최적화를 하고 싶다면 sqrMagnitude를 이용해서 제곱값을 가지고 처리한다. float distance = (player.transform.position - transform.position).magnitude; float distanceSqr = (player.transform.position - transform.position).sqrMagnitude; 아직 참조 중이기 때문에 메모리에서 날라가지는 않았지만, null 체크 시 null로 인식하게끔 강제로 변경한다. 연산자 오버로딩 => Object 클래스에 존재한다. GameObjec..
[알고리즘 문제] 33. 3등의 성적은?
2020. 9. 27. 21:03
문제 풀이/알고리즘 문제풀이
코드 #include #include #include using namespace std; int main(void) { int n, idx, temp, min = 2147000000, cnt = 0; cin >> n; vector vInt(n); for (int i = 0; i > vInt[i]; // 내림차순 선택 정렬 for (int i = 0; i vInt[idx]) idx = j; } temp = vInt[i]; vInt[i] = vInt[idx]; vInt[idx] = temp; } for (int i = 0; i < n; ++i) { i..
[알고리즘 문제] 32. 선택정렬
2020. 9. 27. 18:43
문제 풀이/알고리즘 문제풀이
코드 #include #include #include using namespace std; int main(void) { int n, temp; cin >> n; vector vInt(n); for (int i = 0; i > vInt[i]; for (int i = 0; i vInt[j]) { temp = vInt[i]; vInt[i] = vInt[j]; vInt[j] = temp; } } } for (int i = 0; i > vInt[i]; for (..
[알고리즘 문제] 31. 탄화수소 질량
2020. 9. 27. 18:31
문제 풀이/알고리즘 문제풀이
코드 #include #include #include using namespace std; int main(void) { char c[10]; int i, pos, a = 0, b = 0; cin >> c; // C가 한 개인 경우 if(c[1] == 'H') { a = 1; pos = 1; } else { for(i = 1; c[i] != 'H'; ++i) { a = a * 10 + (c[i] - 48); } pos = i; } // H가 한 개인 경우 if (c[pos + 1] == '\0') b = 1; else { for(i = pos+1; c[i] != '\0'; ++i) { b = b * 10 + (c[i] - 48); } } cout
[자료구조] 링크드 리스트(Singly Linked List) (C++)
2020. 9. 27. 00:44
자료구조, 알고리즘
개념 각 요소를 노드(Node)라고 부르며, 링크드 리스트는 '노드를 연결해서 만드는 리스트'라고 해서 붙여진 이름이다. 링크드 리스트의 노드는 데이터를 보관하는 필드와 다음 노드 주소를 가리키는 포인터로 이루어져 있다. 데이터가 늘어날 때마다 노드를 만들어서 테일에 붙이면 된다. 리스트 사이에 새로운 노드를 끼워 넣거나 제거하는 것도 간편하다. template struct Node { T data;// 데이터 Node* nextNode;// 다음 노드를 가리키는 포인터 Node(T value) : data(value), nextNode(NULL) {} }; template class LinkedList { Node* head; Node* tail; int size = 0; public: LinkedLi..
[알고리즘 문제] 29. 3의 개수는? (small)
2020. 9. 26. 23:59
문제 풀이/알고리즘 문제풀이
코드 #include #include #include using namespace std; int main(void) { int n, tmp, d, result = 0; cin >> n; for(int i = 1; i 0) { d = tmp % 10; if (d == 3) ++result; tmp /= 10; } } cout
[알고리즘 문제] 28. N!에서 0의 개수
2020. 9. 26. 23:48
문제 풀이/알고리즘 문제풀이
코드 #include #include #include using namespace std; int main(void) { int n, i, j, tmp, t = 0, f = 0; cin >> n; for(i = 2; i
[알고리즘 문제] 27. N!의 표현법
2020. 9. 26. 22:55
문제 풀이/알고리즘 문제풀이
코드 #include #include #include using namespace std; int main(void) { int n, i, flag, a; cin >> n; vector vInt(n + 1); for (i = n; i >= 1; --i) { a = i; flag = 2; while(true) { if (a % flag == 0) { a = a / flag; vInt[flag]++; } else flag++; if (a == 1) break; } } cout
[TIL] 2020-09-25
2020. 9. 25. 23:40
TIL(Today I Learned)
미니 RPG 커서를 사용하는 법 1. Texture Type이 Sprite인 경우, 일반 UI처럼 직접 관리하는 방법 2. Texture Type을 Cursor로 설정하는 방법 Cursor.SetCursor(사용할 Texture2D, 마우스 기준점 Vector2, CursorMode) CursorMode.Auto: 해당 플랫폼에 맞춰서 CursorMode.ForceSoftware: 소프트웨어용 커서 Ctrl + m + o: 전체 블록 닫기 Ctrl + m + l: 전체 블록 열기 상태 머신보다 코드에서 직접 컨트롤하는 경우가 좋을 때가 있다. Play를 이용해도 되지만, 자연스럽게 전환되길 원한다면 => Animation.CrossFade docs.unity3d.com/kr/530/ScriptRefere..
[TIL] 2020-09-24
2020. 9. 24. 23:09
TIL(Today I Learned)
미니 RPG Light Map Directional Light: 아주 멀리 있으면서 한쪽 방향으로 빛을 쏴 주는 태양 같은 조명이다. "어느 방향"으로 쏘고 있는지가 중요하다. Point Light: "전구" 같은 느낌으로 특정 범위 안에서 빛을 쏴 주는 조명이다. 횃불 등에 사용한다. Spot Light Light - Mode Realtime: 실시간으로 빛을 연산하겠다. => 어마어마한 부하가 일어난다. Mixed: Realtime과 Baked를 반반 섞어서 사용하겠다. Baked: 계산된 파일을 이용해서 빛을 적용하겠다. 움직이는 물체만 연산 처리한다. Inspector창의 Static을 체크하면 해당 오브젝트가 움직이지 않는다고 가정한다. 1. Collider가 있기 때문에, 두 Collider가..
[TIL] 2020-09-23
2020. 9. 24. 03:03
TIL(Today I Learned)
Coroutine 길 찾기 등 오래 걸리는 로직이라면 여러 프레임에 거쳐서 처리하는 게 나을 수도 있다. 함수를 일시정지를 했다가 다음 Tick에 해당 작업을 이어서 수행할 수 있게끔 한다. class CoroutineTest : IEnumerable { public IEnumerator GetEnumerator() { yield return 1; yield return 2; yield return 3; yield return 4; } } protected override void Init() { base.Init(); SceneType = Define.Scene.Game; Managers.UI.ShowSceneUI(); CoroutineTest test = new CoroutineTest(); fore..
[TIL] 2020-09-22
2020. 9. 23. 03:38
TIL(Today I Learned)
Object Pooling Pooling할 Object / Pooling하지 않을 Object를 Poolable Component로 구분한다. Pool Manager는 Resource Manager를 보조하는 개념으로써, 기존 Resource Manager의 문제점을 개선해야 한다. public GameObject Instantiate(string path, Transform parent = null) { // 1. original 이미 들고 있으면 바로 사용 GameObject prefab = Load($"Prefabs/{path}"); if (prefab == null) { Debug.Log($"Failed to load prefab: {path}"); return null; } // 2. 혹시 po..