260209 TIL - 챕터3 팀프로젝트 3일차

2026. 2. 9. 22:18언리얼 7기 본캠프

오늘의 코드카타 2문제는 새로운 개념들을 익히는 과정이었음. DFS의 형제(?)라고도 할 수 있는 queue를 활용한 BFS와, 비트연산을 처음으로 활용하는 문제가 나왔음. BFS는 그렇다쳐도 비트연산... 아... 진짜 머리 터질뻔함. 이걸 잘하는 사람은 뇌가 컴퓨터인가?

 

어느정도 머릿속에 익어져서 그려본 DFS와 BFS의 탐색 순서

 

 

//숫자 변환하기 문제. '최소 횟수'를 반환하는 문제인데 아무생각없이 dfs썼다가 망하고
//다른 방식이라고 배웠었던 bfs를 더 확실히 익혀서 응용해서 풀었음
//queue를 사용하는 방식인데, dfs보단 직관적이어서 이해가 잘 됐던듯...
//그마저도 visited bool 체크안했더니 타임아웃나서 체크를 꼭 해야했었음
#include <string>
#include <vector>
#include <queue>

using namespace std;

int bfs(int x, int y, int n)
{
    queue<pair<int, int>> q;
    q.push({x, 0});
    
    vector<bool> visited(1000001);
    visited[x] = true;
    
    while (!q.empty())
    {
        int currentVal = q.front().first;
        int currentCnt = q.front().second;
        q.pop();
        
        if (currentVal == y) return currentCnt;
        
        vector<int> next = {currentVal + n, currentVal * 2, currentVal * 3};
        
        for (int i : next)
        {
            if (i <= y && !visited[i])
            {
            visited[i] = true;
            q.push({i, currentCnt + 1});
            }
        }
        
    }
    return -1;
}

int solution(int x, int y, int n) {
    return bfs(x, y, n);
}

//2개 이하로 다른 비트 문제. 이건 그냥 문제 자체를 이해를 못해서 비트에 대한 개념부터 
//비트 연산자까지 다 익혀서 풀어야했음. 코드 자체는 간단했는데, 비트의 특성과 연산을 확실히 익히지 못하면
//추후 비슷한 문제 나왔을 때 풀 수 있을지 걱정됨...

#include <string>
#include <vector>

using namespace std;

vector<long long> solution(vector<long long> numbers) {
    vector<long long> answer;
    for(long long n : numbers)
    {
        if (n % 2 == 0)
        {
            answer.push_back(n + 1);
            continue;
        }
        
        long long bit = 1;
        while ((n & bit) != 0) bit *= 2;
        answer.push_back(n + bit - (bit / 2));
    }
    return answer;
}

 

 

오늘은 내가 맡은 파트의 개발에 집중했고, 아이템, 무기, 인벤토리의 기초 작동 로직을 만들었음. 물론 다 만든건 아니고 추가 작업이랑 수정이 필요한 상황인데...

 

중간 점검을 해보려고 WeaponItem을 상속받은 BP를 만들어서 테스트를 하는데, 뭔 짓을 해도 컴포넌트 탭에 WeaponItem이 사용해야 할 컴포넌트들이 나오지를 않는것. 이게 대체 뭐지??? 하고 한참동안이나 코드 지웠다가 써보고 UPROPERTY 수정하고 클래스설정 만지고 VS 파일 다 날렸다가 다시 해보고 BP 몇번이나 다시 삭제했다가 만들어보고......

한참 만지다가 코드를 다시 슥 봤더니 뇌빼고 '으헤헤 생성자에서 데이터테이블값 불러오면 편하겠지?' 하고 박아놨던 코드가 문제였음

 

더 이상의 자세한 설명은 return;한다

 

아니... 생성자 앞부분에 GameInstance를 떡하니 받아놓고 없으면 return한다고 함. 진짜 정신이 나갔나봄

이러니 이 뒷부분에 있던 컴포넌트 연결이 잘 될 리가 없었고... 내 몇시간이 잘못적은 코드 몇줄때문에 날아가버림

그래서 이걸 지우고나니 마법같이 컴포넌트가 나오면서 잘 해결이 되었고...나는 내 뇌를 저주했음. 코딩할땐 꼭 정신 빼놓지 말고 꽉 잡고 해야겠음............