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

2026. 2. 26. 22:54언리얼 7기 본캠프

//멀쩡한 사각형 문제. 처음엔 이게 무슨 소린가... 싶었는데 일단 가장 작은 단위의 사각형을 구하고(최대공약수를 나눔)
//그 사각형의 범위를 조금씩 바꿔가며 수를 계산해보자, 영향받는 사각형의 갯수가 최소w + 최소h - 1 이라는 결과가 나옴
//그래서 이 결과값에 처음 나눴던 최대공약수를 곱해주면 영향받는 전체 사각형의 수가 나왔음

#include <numeric>

using namespace std;

long long solution(int w,int h) {
    long long answer = 1;
    long long longw = w, longh = h;
    int GCD = gcd(w,h);
    long long size = longw * longh;
    
    int wmin = w / GCD;
    int hmin = h / GCD;
    int mindisabled = wmin + hmin - 1;
    long long disabled = mindisabled * GCD;
    
    answer = size - disabled;
    return answer;
}

//시소 짝궁 문제. 2미터 3미터 4미터일 경우 동일자리, 3:2, 2:1(4:2), 4:3 총 4가지 케이스가 나옴
//이 4가지 케이스에 해당하는 경우의수를 더하고, 심플하게 더해주면 끝. 다만 케이스의 범위를 구하는 과정에서 약간의
//문제가 있어서, 수식을 여러번 고쳐야 했음... 부등호를 반대로 쓰거나 잘못쓰는 성향을 좀 고칠 필요가 있을듯

#include <string>
#include <vector>

using namespace std;

long long solution(vector<int> weights) {
    long long answer = 0;
    
    vector<long long> count(1001, 0);
    for(long long i = 0; i < weights.size(); i++)
    {
        count[weights[i]]++;
    }
    
    for(long long i = 100; i < count.size(); i++)
    {
        long long caseA; // 동일
        long long caseB; // 3:2
        long long caseC; // 4:2
        long long caseD; // 4:3
        
        caseA = count[i] * (count[i] - 1) / 2;
        
        if (i % 2 != 0 || i * 3 / 2 > 1000) caseB = 0;
        else caseB = count[i] * count[i * 3 / 2];
        
        if (i > 500) caseC = 0;
        else caseC = count[i] * count[i * 2];
        
        if (i % 3 != 0 || i * 4 / 3 > 1000 ) caseD = 0;
        else caseD = count[i] * count[i * 4 / 3];
        
        answer += caseA + caseB + caseC + caseD;
    }
    
    return answer;
}

 

오늘은 코드를 전체적으로 점검하며 작동안되는 부분이나 버그들을 고치는데 집중을 했음. 특히 UX적으로 불편했던 장착슬롯->퀵슬롯 드래그가 적용되게 구현했고, 소비아이템을 퀵슬롯에 올릴 경우 퀵슬롯을 누르면 아이템이 즉시 사용되고 기존에 장착된걸 유지하는 로직, 그리고 아무것도 없는 퀵슬롯을 누르면 무기가 해제되고 맨손이 되는 로직까지 구현함