전체 글
[LeetCode] Rotate Array
void rotate(vector& nums, int k) { deque dq; for (int j = 0; j < nums.size(); j++) dq.push_back(nums[j]); nums.clear(); for (int i = 0; i < k; i++) { int val = dq.back(); dq.pop_back(); dq.push_front(val); } while (!dq.empty()) { nums.push_back(dq.front()); dq.pop_front(); } }
[LeetCode] Merge Sorted Array
void merge(vector& nums1, int m, vector& nums2, int n) { int idx = 0; for (int i = m; i < nums1.size(); i++) nums1[i] = nums2[idx++]; sort(nums1.begin(), nums1.end()); }
[C++] 범위 (Scope)
블록 범위 (Block Scope) 객체의 잠재적인 범위는 블록내 선언 된 지점에서 시작하여 블록의 끝에서 끝난다. 중첩된 블럭내 상위 블럭에서 선언 된 것과 동일한 이름으로 선언하는 경우 상위에서 선언 된 것은 무시되고 블럭내 선언 된 것이 사용된다. 이런 방법은 지양해야 하며 다른 이름을 사용한다. int main() { int a = 0; // scope of the first 'a' begins ++a; // the name 'a' is in scope and refers to the first 'a' { int a = 1; // scope of the second 'a' begins // scope of the first 'a' is interrupted a = 42; // 'a' is in s..
[LeetCode] Length of Last Word
매커니즘은 간단하다, 빈 공간을 찾아 위치를 갱신 해주기만 하면 된다. int lengthOfLastWord(string s) { auto start = s.begin(), end = s.end(); string tmp; for (; start != end; start++) { if (*start == ' ') { bool flag = false; for (auto sPos = start; sPos != s.end(); sPos++) { flag = (*sPos == ' '); if (!flag) { tmp = ""; start = sPos; break; } } } if (*start != ' ') tmp += *start; } return tmp.length(); }
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxpobq%2FbtsBvnR9TJm%2FpzMmdwexhYfu2U6qKMl9yK%2Fimg.png)
[C++] string 타입 문자열을 Split (분할)하기
Java에서는 문자열을 특정 구분자를 이용하여 여러 부분으로 나누는 함수 split을 제공한다. 또한 C의 경우 strtok라는 함수를 이용하여 char배열 형태의 문자열을 구분자를 기준으로 나눌 수 있다. 그러나 strtok의 경우 string타입의 문자열은 지원하지 않는다. C++에서는 istringstream이라는 문자열에서 작동하는 스트림 클래스가 있다. 이는 sstream이라는 C++ 표준 라이브러리를 추가해주어야 사용가능하다. istringstream는 istream을 상속받기 때문에 getline함수를 사용할 수 있다. getline 함수 : istream& getline(istream& is, string& str, char delim); getline함수를 이용하여 구분자별로 잘라서 ve..
[Unity] Flow Free 게임 카피캣 만들기
UI 관한 로직 - UIManager.cs using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.SceneManagement; public class UI_Manager : SingletonLocal { public GameUI GameUI_Obj; public ResultUI ResultUI_Obj; int mLayer; bool isCreatedResUI = false; // 파이프 UI 용도 public Canvas pipeUI_CanvasPrefab = null; Canv..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCT7zf%2FbtsBjSFhY71%2FaLBrZ4yvFYijBAWFXEeJ3K%2Fimg.png)
[C++] Radix Sort (기수 정렬)
기수정렬은 정말 신기하게도 비교를 하지 않고 정렬을 하는 방법이기에 시간 복잡도가 O(n)이다. 구체적인 정렬 법을 알기 전에 이름인 '기수'가 뭔지 부터 알아보자. 여기서 '기수'라는 것은 '자릿수'를 의미한다. 자릿수로 뭘 어떻게 하는 것일까?? 방법은 다음과 같다. 1. 1의 자릿수를 보면서 각각의 버킷에 알맞게 담아준다. 버킷에서 순차적으로 뺀다면 1의 자릿수에 맞게 정렬이된다. 2. 1)에 의해서 정렬된 배열에서, 10의 자릿수를 비교해서 버킷에 담고 순차적으로 빼준다. 3. 2)에 의해서 정렬된 배열에서, 100의 자릿수를 비교해서 버킷에 담고 순차적으로 빼준다. 4. 최대 자릿수까지 계속해서 반복한다.. 구체적인 과정을 알아보자. 먼저 최대자릿수 까지 위의 과정을 반복해야 하므로 우리는 최대..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfx7Vx%2FbtsBofNdgMX%2FKdRxz9k2LLSmQ3f0N7Nw7K%2Fimg.png)
[Unreal] Reflection (리플렉션)
언리얼은 UHT(Unreal Header Tool) 을 이용해 클래스 계층 구조, 멤버 변수/함수 등의 정보를 UClass 에 저장한다. 이를 리플렉션이라고도 하고, 프로퍼티 시스템이라고도 부른다. 리플리케이션 시스템은 부가 기능으로, 리플렉션 시스템에 보이도록 했으면 하는 유형이나 프로퍼티에 주석을 달아두면 UHT 가 컴파일시 해당 정보를 수집하게 된다. 프로퍼티 시스템 계층 구조는 아래와 같다. (UField 아래에 UStruct, UEnum, UProperty 가 있음) #include "MyObject.generated.h" UCLASS(Blueprintable) class UMyObject : public UObject { GENERATED_BODY() public: MyUObject(); UP..
[Unreal] 비동기 에셋 로딩
UE4에서 애셋 비동기 로딩을 쉽게 하기 위한 신규시스템이 도입되었다. 데이터 로드 및 참조에 사용되는 방법은 일반적으로 두가지가 있다. FSoftObectPath와 TSoftObjectPtr FSoftObjectPath는 애셋의 전체이름이 저장된 스트링이있는 구조체이다. 애셋의 참조 정보와 생성 메소드들을 포함한다. 에디터에서는 UObject처럼 표시된다. TSoftObjectPtr은 FsoftObjectPath를 감싸는 TWeakObjectPtr 이다. 에디터 UI에서 특정 클래스만 선택되게끔 제한하도록 하는 역할. 블루프린트에서 애셋의 SoftReference로 표시 애셋 레지스트리와 오브젝트 라이브러리 애셋 레지스트리는 애셋에 대한 메타데이터를 저장하여, 검색 및 질의를 가능하게 한다. 에디터에서..