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

2026. 2. 13. 21:38언리얼 7기 본캠프

오늘은 굉장히 예전에 풀었던 0레벨 문제의 응용판... 도 나오고, 아주 예전에 잠깐 봤던 투 포인터라는 개념을 활용해야하는 문제가 나왔음. 그때 잠깐 보고 지나갔던거라 기억에서 사라지기 직전이었는데 마침 응용을 할 수 있어서 좋았음

 

//삼각 달팽이 문제. 나선형으로 배열을 만들고 그걸 순서대로 담아 내는 문제인데...
//이거랑 정확히 똑같지만 삼각이 아니라 사각형인 문제가 0레벨에 있었음. 근데 이게 2레벨이라... 답이 크게 차이나지도 않는데...
#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n) {
    vector<int> answer;
    vector<vector<int>> triangle(n);
    for(int i = 0; i < n; i++)
    {
        triangle[i].assign(i + 1, 0);
    }
    
    int y = -1, x = 0;
    int num = 1;
    
    for(int i = 0; i < n; i++)
    {
        for (int j = 0; j < n - i; j++)
        {
            if (i % 3 == 0)
            {
                y++;
            }
            else if (i % 3 == 1)
            {
                x++;
            }
            else if (i % 3 == 2)
            {
                y--;
                x--;
            }
            triangle[y][x] = num;
            num++;
        }
    }
    for(int i = 0; i < triangle.size(); i++)
    {
        for(int j = 0; j < triangle[i].size(); j++)
        {
            answer.push_back(triangle[i][j]);
        }
    }
    return answer;
}

//연속된 부분 수열의 합 문제. 앞과 뒤를 정해놓고 왔다갔다하며 푸는 투 포인터의 기초 개념수준의 문제였음
//투 포인터에 대한걸 모르면 좀 여러가지로 고생해서 풀어야 했을것같은데...

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> sequence, int k) {
    vector<int> answer = {0, 1000000};
    int start = 0, end = 0, sum = sequence[0];
    
    while (end < sequence.size())
    {
        if (sum < k)
        {
            end++;
            if (end < sequence.size()) sum += sequence[end];
            continue;
        }
        if (sum > k)
        {
            sum -= sequence[start];
            start++;
            continue;
        }
        if (sum == k)
        {
            int length = end - start;
            int answerlength = answer[1] - answer[0];
            if (length < answerlength)
            {
                answer[0] = start;
                answer[1] = end;
            }
            sum -= sequence[start];
            start++;
        }
    }
    return answer;
}

 

챌린지반 수업은 지금까지 구현했던 GAS를 응용해서 어빌리티 하나를 더 만드는 실습이었는데... 저번 실습하고 저장을 안했는지 어쨌는지 이전에 한게 전부 다 날아가서 급하게 처음부터 다시 구현에 시도함; 결과적으로 성공했음. 한번 만들어놓으면 확장성이 좋아서 추가로 만드는게 어렵지 않았기 때문. 작업하는 팀원들이 GAS에 대한 이해를 다 하고 있다면 이걸 도입하는게 만드는데 크게 도움이 될 것 같았음. 속도나 편의성이나.

 

이후 인벤토리 UI 및 인터랙트 로직 구현을 하고 있었는데, UI는 진짜 미적 감각의 영역이고 나랑은 아무런 관련이 없는 것이라(ㅠㅠ) 일단 작동하게만 만들어둘 예정. 생각보다 로직에 공을 많이 들여야해서 차마 모두 완성하지는 못했음...

 

그리고 일단 지금까지 만든것들로 테스트빌드를 만들었는데, 템플릿 캐릭터에 총기를 들려주고 AI 적에게 공격해 데미지를 주고 사망시키는 아주 간단한 테스트였지만 구현이 잘 되어서 정상작동하는것을 보니까 아주 좋았음. 서로의 코드를 딱히 보지 않고 공통된 TakeDamage같은 함수를 통해서만 상호작용하게 했는데, 이게 잘 작동하는 걸 보고 상호작용할 때 꼭 서로가 서로를 알 필요가 없다는걸 깨달았음

 

총에 맞고 쓰러진 적, 그리고 AI와 데미지 관련 로그들