분류 전체보기
[골4] 14502 - 연구소
참고해서 코드 작성 #include #include #include #include #define y first #define x second using namespace std; using IntPair = pair; using TwoDVec = vector; IntPair dir[] { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } }; TwoDVec m, vm; vector vis; int h, w, ans = 0; // 바이러스 지도 초기화 함수 void SetMap() { for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) vm[i][j] = m[i][j]; } } void SpreadVirus() { queue q;..
C++ if/switch statement with initializer
0. 서문 지금까지의 C++에서 if 또는 switch의 평가식에 사용되는 변수는 미리 선언되고 적절히 초기화된 상태여야 한다. std::map에 원소를 추가하고 이에 대한 예외 처리를 하는 아래 예제가 일반적인 샘플이라 할 수 있다. #include #include int main() { std::map map; map["hello"] = 1; map["world"] = 2; // 일단 insert를 수행하고 결과 pair를 반환받아야 한다. auto ret = map.insert({ "hello", 3 }); // 그러고 나서, pair의 2번째 요소를 체크 if (!ret.second) std::cout
[실1] 1074 - Z
#include #include #include #include #include #include #include #pragma warning(disable : 4996) using namespace std; int n, r, c, ans = 0; void dc(int x, int y, int size) { if (c == x && r == y) { cout = x && r >= y) { auto half = size / 2; dc(x, y, half); dc(x + half, y, half); dc(x, y + half, half); dc(x + half, y + half, half); } else ans += pow(size, 2); } int main() { ios::sync_with_stdio(0)..
[실1] 1697 - 숨바꼭질
for 범위 기반 임시 초기화 리스트를 이용해서 푼게 핵심이다. #include #include #include #include #include using namespace std; int dist[100002]; int n, k; int main() { ios::sync_with_stdio(0); cin.tie(0); fill(dist, dist + 100001, -1); cin >> n >> k; dist[n] = 0; queue q; q.push(n); while (dist[k] == -1) { int cur = q.front(); q.pop(); for (int nxt : {cur - 1, cur + 1, cur * 2}) { if (nxt 100000) continue; ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuDW4y%2FbtrS3p6xuoC%2FjeA9H7TgIhaP9YPqsfZUw1%2Fimg.png)
[Unity] 강체(RigidBody) AddForce에 대한
정의 Rigidbody에서 엄청 많이 쓰이는 AddForce를 알아보자 2가지 형태가 있다. public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force); public void AddForce(float x, float y, float z, ForceMode mode = ForceMode.Force); 쉽게 말하면 AddForce(방향*힘 값, 힘의 종류) 라고 보면 된다. AddForce는 Rigidbody에게 힘을 전달해준다. (하지만 모든 Rigidbody가 아닌 Active 상태일 때만 전달된다.) **이러한 Force calculation은 FixedUpdate() 때 이루어진다. using UnityEngine; // 이것을 쓰지..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxxgqa%2FbtrS09XqdRx%2FHkRaSkPI9DJFh5XoK5XcS0%2Fimg.gif)
[Unity] 트랜스폼을 이용해서 AI 만들기
Look At을 이용하면 게임 오브젝트의 앞 방향이 Look At에서 지칭하는 오브젝트를 바라본다. Transform 형식의 변수를 이용하고 transform.LookAt(Transform 변수)를 이용해 변수 오브젝트의 위치를 바라보라고 명령을 내리게 된다. 다른 메쉬에 적용했을 시 출처 : https://young-94.tistory.com/13
[Unity] 키보드와 마우스 입력받기
1. GetAxis, GetAxisRaw InputManager에 입력된 키를 누를 때, 값을 반환한다. 이때, 반환되는 값은 -1 ~ 1사이가 반환된다. nagative button을 누르면 음수가, positive button을 누르면 양수가 반환된다. 아무것도 누르지 않는다면 0이 반환된다. 물체를 이동시키고 싶을 때 사용한다. GetAxis() -1 ~ 1까지의 실수를 반환 GetAxisRaw() 버튼을 눌렀을 때 1, -1을 반환. 그렇지 않다면 0을 반환 2. GetButton InputManager에 입력된 키를 누를 때, 참, 거짓을 반환한다. 키를 눌렀을 때는 true를 반환, 그렇지 않다면 false를 반환한다. GetButton() 키를 누르는 시간만큼 true를 반환 GetButto..
[Unreal] 클래스 블프 및 메쉬, 텍스처 등 로딩 Finder
ConstructorHelpers 클래스 내에 존재하는 함수 모든건 생성자 내부에서 이루어져야됨. BeginPlay 절대 x 파라미터는 TEXT형이며 쌍따옴표 안에 해당 경로가 들어가야 한다. 항상 /Game 으로 시작 클래스 로딩 FClassFinder // 클래스는 끝에 _C 접두어를 붙어줘야됨. 아래는 예시 auto BP_Actor = ConstructorHelpers::FClassFinder(TEXT("/Game/Actors/TestActor.TestActor_C")); 또는 아래와 같이 가능 ConstructorHelpers::FClassFinder BP_ACTOR(TEXT("")); 클래스는 TSubclassOf 타입임 즉 UClass, 항상 Succeed 함수로 널이 아닌지 체크 TSubcl..
라빈-카프 알고리즘 (Rabin-Karp) 해시값을 통한 문자열 비교
정의 / 시간 복잡도 O(n) 문자열에 해싱 기법을 사용하여 해시 값으로 비교하는 알고리즘이다. 간단하게 해시 값을 만들려면 문자열의 각 문자(ASCII TABLE 값)에 특정 수의 제곱 수를 차례대로 곱하여 모두 더하면 된다. 이러한 방식을 사용하면 두 문자열이 서로 다를 때 두 문자열의 해시 값이 다르게 나오게 된다. 예를 들어 ABCD와 ABED라는 문자열이 있을 때 ABCD의 해시 값은 65 * 3^3 + 66 * 3^2 + 67 * 3^1 + 68 * 3^0 = 2618 ABED의 해시 값은 65 * 3^3 + 66 * 3^2 + 69 * 3^1 + 68 * 3^0 = 2624 이므로 ABCD와 ABED 두 문자열은 서로 일치하지 않는다는 결과가 된다. 간혹 해시 값이 서로 충돌하는 해시 충돌 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd8pb4o%2FbtrSwrRHhLm%2FK1QFIhc0w0XhykUboBqmmK%2Fimg.png)
C++ 모듈 (Module)
정의 기존의 #include 방식인 Translation Unit 방식과는 다른, 별개와 컴파일되는 소스 코드 파일의 집합이다. Header파일을 사용하면서 생겨나는 많은 문제를 제거하거나 줄이고, 컴파일 시간을 단축하기도 한다. 선언된 모든 매크로, 전처리 지시문과 export 하지 않는 이름(names)들은 표시되지 않으며, 컴파일 할 때 영향을 주지 않는다. 또한 순서에 관계 없이 가져올 수 있다. (include, import) Module을 한 번 컴파일한 후에는 export된 모든 형식(Type), 함수 및 템플릿을 이진파일에 저장한다. 이 파일은 이전의 헤더 파일들보다 훨씬 빠르게 처리될 수 있다. 기존의 C++ 빌드 과정 C++ 프로그램의 빌드 과정은 전처리, 컴파일, 링크로 구성된다. 전..