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

2026. 2. 5. 22:59언리얼 7기 본캠프

대망의 팀프로젝트 발제일. 하지만 코드카타는 멈추지 않음...

오늘은 들어오는 데이터를 잘 분류해서 관리하는 문제와 DFS를 응용하는 문제가 또 나왔음. 재귀함수가 중요하긴 한 것 같은데... 잘못쓰면 위험한 부분이 분명 있을것 같아서 일단 연습은 하고있지만 숙달이 언제쯤 될지는 잘 모르겠음

 

//주차 요금 문제. 지금까지 배웠던 이런저런 잡기술(?)들을 응용해서 풀어봤음. 아무래도 이런 데이터 정리 문제가 재밌는듯?
//마지막에 이상하게 값이 잘 안나와서 머리를 싸매다가, 혹시나해서 ceil에 강제 형변환을 넣어봤더니
//문제가 풀렸음. 정수와 정수의 나눗셈은 무조건 정수로 나오기때문에(버림) ceil을 해봐야
//올림이 되지 않는다는걸 배웠음. 무조건 형변환을 해주는걸로...
#include <string>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>

using namespace std;

int timeToMin(string time)
{
    int hrs = 0;
    int mins = 0;
    string temp = "";
    for(char c : time)
    {
        if (c == ':')
        {
            hrs = stoi(temp);
            temp = "";
            continue;
        }
        temp += c;
    }
    mins = hrs * 60 + stoi(temp);
    return mins;
}

vector<int> solution(vector<int> fees, vector<string> records) {
    vector<int> answer;
    map<int, int> inmap;
    map<int, int> outmap;
    
    for (string s : records)
    {
        string timestr, type;
        int car, time;
        stringstream ss(s);
        ss >> timestr >> car >> type;
        time = timeToMin(timestr);
        if (type == "IN")
        {
            inmap[car] = time;
        }
        if (type == "OUT")
        {
            outmap[car] += time - inmap[car];
            inmap.erase(car);
        }
    }
    
    if (!inmap.empty())
    {
        for (pair p : inmap)
        {
            outmap[p.first] += timeToMin("23:59") - p.second;
        }
    }
    
    for (pair p : outmap)
    {
        if (p.second <= fees[0]) answer.push_back(fees[1]);
        else
        {
            answer.push_back(ceil((double)(p.second - fees[0]) / fees[2]) * fees[3] + fees[1]);
        }
    }
    
    return answer;
}

//모음사전 문제. dfs를 활용한거긴 한데... 전역에 변수를 지정해주는것과
//함수에서 레퍼런스로 받는 인수의 갯수를 늘리는것중 어느게 더 좋을지 아직 확실히 생각해보지 못함
//찾아보는 시간을 가져야 할 듯
#include <string>
#include <vector>

using namespace std;

void dfs(string current, int& count, int& answer, const string& word, string& vowels)
{
    if (answer > 0) return;
    if (current.length() == 5) return;
    
    for(int i = 0; i < 5; i++){
        string next = current + vowels[i];
        count++;
        if (next == word)
        {
            answer = count;
            break;
        }
        dfs(next, count, answer, word, vowels);
    }
}

int solution(string word) {
    int answer = 0;
    int count = 0;
    string vowels = "AEIOU";
    dfs("", count, answer, word, vowels);
    return answer;
}

 

챌린지반에서는 GAS Ability를 통해 '스킬'을 만드는 과정을 익힘. Gameplay Tag를 통해 공격과 상태를 지정하고, 여러가지 경우에서 Ability의 발동 가능성을 제어하고 연속발동이나 여러가지의 조건을 다양하게 나눠둬서 몇개만 만들어두면 아주 편하게 제작이 가능할것이라고 생각되는 좋은 기능이었음.그리고 범용 AnimNotify를 만들어서 애니메이션 중간에 넣는걸로 호출이 가능한건 상당히 좋은 기능이었음

동영상을 못올려서 결과물 캡처 이미지만... 공격과 동시에 디버그로 타격영역 체크가 되는 모습

 

 

그리고 대망의 팀프로젝트 발제날. 실제 기간 약 3주 남짓한 시간동안 나를 포함한 5명의 팀원분들과 슈터 게임 프로젝트를 제작하는것이 과제로 나왔음

그래서 일단 SA부터 완료하기위해 기획서를 작성하려는데... 분반수업 일정이 겹치고 내가 오늘 잠시 외출한것도 겹치고 해서 실질적으로 회의한 시간이 부족하기도 했고, 장르 특성상 다양하게 무언가 만들기가 힘들어서 이런저런 의견 충돌이 잦다보니 아직 완전히 기획서를 완성하지는 못했음. 기획서를 꼼꼼하고 자세히 적은 후 클래스 다이어그램도 확실히 만들어야 추후 개발 과정에 큰 지장이 없을터라, 내일 최대한 노력해서 완성시키고 주말동안 필요한 내용이나 어셋들을 좀 찾아보고 월요일부터 본격적으로 개발하는 과정으로 들어갈 듯 함