2025-04-23TIL 2주차 완

별빛에소원을·2025년 4월 23일

TeamSparta-Unreal1기-TIL

목록 보기
78/90
post-thumbnail

알고리즘

K진수에서 소수 개수 구하기


#include <string>
#include <vector>
#include <cmath>

using namespace std;

// 소수 판별 함수
bool isPrime(long long num) {
    if (num < 2) return false;
    for (long long i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) return false;
    }
    return true;
}

// k진수 변환 함수
string toBaseK(long long n, int k) {
    if (n == 0) return "0";
    string result = "";
    while (n > 0) {
        result = to_string(n % k) + result;
        n /= k;
    }
    return result;
}

// 메인 솔루션 함수
int solution(int n, int k) {
    // 1. k진수로 변환
    string kBase = toBaseK(n, k);
    int count = 0;
    size_t pos = 0;

    // 2. 문자열을 순회하며 숫자 추출 및 조건 확인
    while (pos < kBase.length()) {
        // 0을 건너뛰기
        while (pos < kBase.length() && kBase[pos] == '0') pos++;
        if (pos >= kBase.length()) break;

        // 연속된 숫자 추출
        size_t start = pos;
        while (pos < kBase.length() && kBase[pos] != '0') pos++;
        string numStr = kBase.substr(start, pos - start);

        // 3. 소수인지 확인
        try {
            long long num = stoll(numStr);
            if (isPrime(num)) {
                // 4. 조건 확인
                bool leftZero = (start > 0 && kBase[start - 1] == '0');
                bool rightZero = (pos < kBase.length() && kBase[pos] == '0');
                if ((leftZero && rightZero) ||  // 0P0
                    (leftZero && !rightZero) || // 0P
                    (!leftZero && rightZero) || // P0
                    (!leftZero && !rightZero)) { // P
                    count++;
                }
            }
        } catch (...) {
            // 숫자가 너무 크면 무시
        }
    }

    return count;

AI(2)

RVO

가중치를 적용해 케릭터를 자연스럽게 부딛히지 않게 움직이는 로직을 작성할 수 있다.
가중치를 적용하는것 보다 Radius를 설정해서 회피할 수 있도록 하자.

애니메이션

AI의 애니메이션을 적용하는 것을 공부했다.
AI의 애니메이션 또한 각종 변수로 상태를 표현하지만 기반이 BehaviorTree와 BlackBoard를 통해 이루어진다는 것을 알게 되었고,
플레이어의 입력을 받아 애니메이션이 동작하는 방식이 아닌 Controller에서 MoveTo등의 명령을 실행하면 속도가 변하고 그 값을 기준으로 애니메이션 블루프린트에서 동작된다.
복잡한 애니메이션에 한해서는 크게 다르지 않은거 같다.

Attenuation

거리에 따른 소리를 적용하는 방식을 정의할 수 있다.
이건 테스트를 많이 해봐야할거같다.
적용범위 밖에서 재생시키고 접근했을때 소리가 들리지 않는 경우가 있는데 이것의 경우 해결해야할 버그라고 생각한다. 적어도 이것의 해결방법은 찾아두자.

CS

운영체제 동작방식을 공부해야 함을 느꼈다.
책이 아닌 영상으로 참고해서 CS지식을 채우고자 했는데 응용소프트웨어를 공부하면서도 커널에 대해서는 알아본적이 없었다.

자료구조도 트리, 해시테이블, 그래프에 대해서는 구현해본적이 없다.
따로 시간을 내서 구현해보면 좋을거 같다.

전체적으로 필요하긴 하니 책을 한번 사보자는 생각이든다.

느낀점

비헤이비어 트리 들어가기전에 충분히 복습하고 실습을 해보자 AI는 처음이니까 용어만이라도 적어도 체득할 수 있도록 하자.

profile
취미로 게임하는사람

0개의 댓글