260114 TIL - Unreal C++ 5일차

2026. 1. 14. 21:19언리얼 7기 본캠프

오늘도 코드카타와 좋은 승부를 겨룸. 특히 코드카타 하면서 처음으로 시간 복잡도에 대해 생각해보게 되었음. 작성한 코드가 동작은 하는데 시간복잡도때문에 정답이 아니라서 코드를 다 뜯어서 다시 짜야했음...

 

//비효율적인 코드. 길이를 비교하고 erase하고 for 계속 돌리고...
// X Y의 자릿수가 300만까지 갈 수 있다는걸 간과한 코드였음
string solution(string X, string Y) {
    string answer = "";
    vector<char> vec;
    for(char x : X){
        for(int i = 0; i < Y.length(); i++){
            if (x == Y[i]){
                vec.push_back(x);
                Y.erase(i, 1);
                break;
            }
        }
    }
    sort(vec.rbegin(), vec.rend());
    if(!vec.empty()&&vec[0] == '0') return "0";
    for(char c : vec){
        answer.push_back(c);
    }
    if(answer == "") return "-1";
    return answer;
}

//개선한 코드. 0~9의 수를 저장할 벡터를 만들고 for문으로 수를 저장
//이후 이를 비교하며 큰 수부터 내려와서 수를 만들고 합산
//'0'을 더하거나 빼는걸로 수를 char나 int로 바꾸는거 슬슬 적응할때도 됐는데...
string solution(string X, string Y) {
    string answer = "";
    vector<int> X_count(10);
    vector<int> Y_count(10);
    
    for(char x : X){
        X_count[x - '0']++;
    }
    
    for(char y : Y){
        Y_count[y - '0']++;
    }
    
    for(int i = 9; i >= 0; i--){
        if(X_count[i] == 0 || Y_count[i] == 0) continue;
        while(X_count[i] > 0 && Y_count[i] > 0){
            if(i == 0 && answer == ""){
                answer = "0";
                break;
            }
            answer.push_back((char)(i + '0'));
            X_count[i] -= 1;
            Y_count[i] -= 1;
        }
    }
    if(answer == "") return "-1";
    return answer;
}

 

이후 1주차 강의를 쭈욱 복습하며 6번과제의 기반을 만들기 시작함. 액터 하나하나 만드는데 공이 제법 많이 들어서 일전의 언리얼로 했던 블루프린트 과제보다 시간이 훨씬 많이 들 것 같아서 과제를 최대한 빨리 마무리해야겠다 싶었음

아직 코드도 맵 제작도 진행중이기 때문이 맛보기 이미지만 보여주고 오늘은 마무리함

 

무료모델 좋은거 많다 ^^;