260219 TIL - 챕터3 팀프로젝트 8 + @일차

2026. 2. 19. 21:03언리얼 7기 본캠프

토요일부터 수요일까지 차라리 코딩을 하고싶었을 정도로 지독한 설날 일정을 보냈기 때문에 몸살이 지독하게 들어서 컨디션이 너무 심하게 안좋았음. 맘같아서는 휴가 내고 쉬고싶었지만 팀프로젝트 기간에 그럴수는 없으니...

 

//두 큐 합 같게 만들기 문제. 사실 큐라고 되어있긴한데 실제로 큐를 쓰지는 않았고(큐는 합을 구하기가 힘듬)
//벡터를 큐처럼 사용하게 만들어서 푼 문제인데, 약간 투포인터 비스무리한 개념을 이용해서 풀었음
//아직 이걸 이어붙여서 투포인터로 쭉 훑는다는 생각을 하기는 좀 무리가 있는듯

#include <string>
#include <vector>
#include <numeric>

using namespace std;

int solution(vector<int> queue1, vector<int> queue2) {
    int answer = 0;
    long long q1sum = accumulate(queue1.begin(), queue1.end(), 0LL);
    long long q2sum = accumulate(queue2.begin(), queue2.end(), 0LL);
    long long totalsum = q1sum + q2sum;
    if (totalsum % 2 == 1) return -1;
    
    int q1index = 0, q2index = 0;
    int trylimit = (queue1.size() + queue2.size()) * 2;
    while (true)
    {
        if (answer > trylimit) return -1;
        if (q1sum == q2sum) break;
        if (q1sum > q2sum)
        {
            long long numtomove = queue1[q1index];
            queue2.push_back(numtomove);
            q1index++;
            answer++;
            q1sum = q1sum - numtomove;
            q2sum = q2sum + numtomove;
        }
        else if (q2sum > q1sum)
        {
            long long numtomove = queue2[q2index];
            queue1.push_back(numtomove);
            q2index++;
            answer++;
            q1sum = q1sum + numtomove;
            q2sum = q2sum - numtomove;
        }
    }
    return answer;
}

//무인도 여행 문제. 골치아픈 탐색 알고리즘 문제인데...
//아직도 이차원배열이 머리에 바로바로 들어오지가 않아서 수를 정렬하는데 골머리를 썩었음
//그래도 잘 정리해서 풀리긴 한듯. 중간에 row와 columm을 반대로 적는 실수를 하는 바람에 그걸 옮기면서
//이차원 배열에서의 row와 column이 일반적인 느낌과는 조금 다르다는것도 배웠음. 아직도 row column이 헷갈리긴 하는데...

#include <string>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

int BFS(int row, int column, vector<vector<bool>>& isvisited, vector<string>& maps)
{
    int sum = 0;
    queue<pair<int, int>> search;
    search.push({row, column});
    sum += maps[row][column] - '0';
    isvisited[row][column] = true;
    vector<int> drow = {-1, 1, 0, 0};
    vector<int> dcol = {0, 0, -1, 1};
    
    while (!search.empty())
    {
        int currow = search.front().first;
        int curcol = search.front().second;
        for(int i = 0; i < 4; i++)
        {
            int newcol = curcol + dcol[i];
            int newrow = currow + drow[i];
            if (newrow < 0 || newrow >= maps.size() || newcol < 0 || newcol >= maps[0].length()) continue; 
            if (isvisited[newrow][newcol] || maps[newrow][newcol] == 'X') continue;
            isvisited[newrow][newcol] = true;
            sum += maps[newrow][newcol] - '0';
            search.push({newrow, newcol});
        }
        search.pop();
    }
    
    return sum;
}

vector<int> solution(vector<string> maps) {
    vector<int> answer;
    int row = maps.size();
    int column = maps[0].length();    
    vector<vector<bool>> isvisited(row, vector<bool>(column, false));
    
    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < column; j++)
        {
            if (maps[i][j] != 'X' && !isvisited[i][j]) answer.push_back(BFS(i, j, isvisited, maps));
        }
    }
    if (answer.empty()) return vector<int>{-1};
    sort(answer.begin(), answer.end());
    return answer;
}

 

 

챌린저반 수업에서는 디커플링에 관한 내용을 배웠는데, 지금 진행중인 팀프로젝트에서는 디커플링이 잘 된 부분도 있고 아직 미흡한 부분도 있어서 이제 공용으로 사용할 델리게이트나 인터페이스를 만들어두고 그걸 같이 사용하는것이 생각보다 좋게 작용하는 부분도 있어서 나쁘지 않았다고 할 수 있음

다만 아직 유기적으로 연결시켜본것이 아니기 때문에 좀 더 신중하게 접근할 필요가 있을 듯. 특히 C++에서는 인터페이스 문법이 영 불편하다던데 실제로도 그렇기도 하고 뭔가 어색하기도 해서...

 

설 기간 + 오늘까지 계속해서 무기 관련 로직 고치고 인벤토리 UI를 뜯어고치고 있는데, 영 진전이 없음. 버그가 시도때도없이 터지고 제대로 의도안한대로 작동하고 그래서... 컨디션 안좋은거랑 겹쳐서 수정을 너무 적게 해버림. 아무래도 내일까진 몸살에 근육통으로 앓을것 같으니 할수있는만큼 최대한 열심히 해두고 주말에 꼭 컨디션을 회복해서 돌아와야겠음

 

늙기 싫다...

 

범위형 투사체 공격과 맞으면 날아가는 적
제작중인 임시 인벤토리 UI