251224 TIL - C++ 13일차, 레벨 테스트

2025. 12. 24. 20:51언리얼 7기 본캠프

오늘도 아침에 코드카타를 풀었음. 갈수록 문제 난이도가 올라서 생각할게 많아지고 코드도 몇번 고쳐가면서 풀다보니 6문제를 풀었음. 그래도 사고능력이 많이 늘긴 했는데, 여전히 수학적으로 접근하면 어려운건 마찬가지인듯함.

 

10시부터는 레벨 테스트를 했는데, 일단 답을 전부 적어서 내긴 했는데 마무리하고나서 코드를 검토해보니 아쉬운점이 있었음. 일단 전부 작동하는상태로 내긴 했는데, 예외처리를 안하거나 문법을 애매하게 적거나 하는등 한게 있어서 좀 어려울듯

 

이후 언리얼 기본개념 강의를 보다가 2시~5시까지 병원에 다녀옴(발목에 염증 또는 통풍이라는데... 가만히 있는데 왜 발목에...)

이후 언리얼 관련해서 좀 만져보다가 통증때문에 머리가 잘 돌아가지 않아서 기존에 배운거 복습하는 방향으로 전환함

 

오늘 작성한 코드 첨부함

 

내일은 크리스마스라 휴일인데 친구도 없고 약속도 없으니 집에서 그냥 쉴 예정...

 

#include <iostream>
#include <vector>
using namespace std;

long long sum(const vector<int>& v) {
    long long sum = 0;
    if(v.empty()) return 0;
    for(int i = 0; i < v.size(); i++){
        sum += v[i];
    }
    return sum;
}

int main() {
    vector<int> v{3, 6, 7, 9};
    cout << sum(v) << "\n"; // 25
}


#include <iostream>
using namespace std;

bool is_leap(int y) {
	if (y % 4 == 0){
	    if(y % 100 == 0){
	        if(y % 400 == 0){
	            return true;
	        }
	        return false;
	    }
	    return true;
	}
}

int main() {
    cout << boolalpha << is_leap(2000) << " " << is_leap(1900) << " " << is_leap(2024) << "\n"; // true false true
}

#include <iostream>
using namespace std;

class Rect {
private:
    int width, height;
public:
    Rect(int wid, int hei){
        if(wid < 0) {
            width = 0;
        } else width = wid;
        if(hei < 0) {
            height = 0;
        } else height = hei;
    }
    
    int area() const {
        return width * height;
    }
    
    void setWidth(int wid){
        if(wid < 0) {
            width = 0;
        } else width = wid;
    }
    
    void setHeight(int hei){
        if(hei < 0) {
            height = 0;
        } else height = hei;
    }
    
};

int main() {
    Rect r(3,4);
    cout << r.area() << "\n"; // 12
    r.setWidth(-5); r.setHeight(2);
    cout << r.area() << "\n"; // 0
}


#include <iostream>
#include <vector>
using namespace std;

class Animal {
	public:
	virtual void speak(){
	    cout << "I'm animal!" << endl;
	}
	virtual ~Animal(){};
};

class Dog : public Animal {
    public:
    void speak(){
        cout << "Woof" << endl;
    }
};

class Cat : public Animal {
    public:
    void speak(){
        cout << "Meow" << endl;
    }
};

int main() {
    vector<Animal*> zoo{ new Dog, new Cat, new Animal };
    for (auto p : zoo) p->speak(); // Woof / Meow / ???
    for (auto p : zoo) delete p;
}

#include <iostream>
#include <string>
using namespace std;

template <typename T>
T get_max(T a, T b){ // const T&로 썼어야 했는데...
    if (a > b) return a;
    if (b > a) return b;
    // 둘이 같을 때 리턴도 만들었어야 했는데... 둘중 하나에 =만 붙였어도...
}


int main() {
    cout << get_max(10, 20) << "\n";            // 20
    cout << get_max(3.14, 2.71) << "\n";        // 3.14
    string s1 = "Apple", s2 = "Banana";
    cout << get_max(s1, s2) << "\n";            // Banana
}

#include <iostream>
using namespace std;

class IntPtr {
    int* ptr;
public:
    IntPtr(int val) {
        ptr = new int(val);
    }
    
    ~IntPtr() {
        delete ptr;
        cout << "pointer deleted" << endl; // 디버그용 텍스트출력
    }

    IntPtr(const IntPtr& other) {
        ptr = new int(other.getValue());
    }

    int getValue() const { 
        return *ptr; 
    }
};

int main() {
    IntPtr p1(10);
    IntPtr p2 = p1; // 복사 생성자 호출

    cout << p1.getValue() << "\n"; // 10
    cout << p2.getValue() << "\n"; // 10
}