IT 프로그래밍 422

[c++] 15894번 수학은 체육과목 입니다.

문제코드#include using namespace std;int main(){ unsigned int n; cin >> n; cout  풀이정말 간단한 문제지만 오답률이 조금 있었던 것이 바로 범위를 파악하지 못했기 때문입니다.  그냥 int n; 으로 하면 되지 않을까? 라고 생각할 수 있지만 주어진 입력 범위가 1  따라서 해당 경우에 오버플로우가 발생하게 됩니다. 그러기 때문에 unsigned int 를 사용하면 됩니다.unsignedint는 0부터 4,294,967,295 범위의 수를 사용가능한 것입니다.

[c++] 백준 3009번 네 번째 점

문제코드#include using namespace std;int main(){ int x[3]; int y[3]; for (int i = 0; i > x[i] >> y[i]; } if (x[0] == x[1]) { cout  문제 풀이주어진 세 점을 이용하여 직사각형의 네 번째 점을 찾는 프로그램입니다. 직사각형은 네 점으로 이루어져 있고, 이 중 세 점이 주어졌을 때 나머지 한 점의 좌표를 구하는 것입니다. 주어진 세 점 중 좌표값이 두 번 등장하지 않은 값을 찾으면 되는데요. 이것만 추론해냈다면 코드를 구성하는 것은 간단합니다.  먼저 int x[3], int y[3]을 통해 각각 저장할 배열을 만들어줍니다. 이후 if문을 통해 각각의 경우의 수를 구해주면 되는데요. 문제에서 평행한 네 좌표라는 ..

[c++] 1193번 : 분수찾기

문제 코드#include using namespace std;int main(){ int n; cin >> n; int line = 1; while (n - line > 0) { n -= line; line++; } if (line % 2 == 1) { cout  문제 해설int n;cin >> n;int line = 1;사용자로부터 n을 입력받습니다. line은 몇 번째 대각선인지 나타냅니다. 이렇게 대각선 순서대로 1, 2, 3, 4, 5 로 라인을 계산을 해줄 것입니다. 라인을 구해주는 이유는 라인을 구해야 공통점이 나오기 때문입니다. while (n - line > 0){ n -= line; line++;}while 루프를 통해 n이 몇 번째 위치의 대각선이 있는지 구해줍니다. 각..

[c++] 백준 2292번 : 벌집

문제코드#include using namespace std;int main(){ int n; cin >> n; int number = 0; for (int i = 2; i  풀이"층"을 구하는 것인데요. 이 층은 6의 등비수열로 이루어져 있습니다. 숫자를 자세히 보면12~78~1920~37로6 12 18 24... 순으로 묶여있는 것을 볼 수 있습니다. 이럴 경우 6 * Layer 식으로 범위가 늘어갑니다. 이를 활용하여 등비수열의 합을 구하면 되는데요.int n;cin >> n;int number = 0;for (int i = 2; i 이렇게 for문을 써서 i는 6 * number 만큼 증가하게 하고서 루프를 짜면 됩니다. 이럴 경우  n = 19라면number = 0, i = 2로 시작첫 번째 반복..

[c++] 순수 가상 함수, 추상 기본 클래스, 인터페이스 클래스

순수 가상 함수virtual void speak() const = 0; 부모 클래스에서 자식 클래스에 특정 함수를 만들고 싶을 때 이것을 쓰는 것입니다.  그러면 만약에 speak()를 깜빡했을 때 오류가 뜨게 되는 것입니다. 이것이 바로 순수 가상 함수를 사용하는 이유입니다. 즉 자식 클래스가 깜빡할 경우를 대비해서 경고 표시를 만들어주는 것이라고 보면 됩니다.  class를 설계할 때 구조를 도와주는 것이라고 보면 됩니다. 다이아몬드 상속문제#include #include using namespace std;class PoweredDevice{public: int m_i; PoweredDevice(int power) { cout   전체코드입니다.class PoweredDevice{public: i..

[C++] 가상 소멸자

class A{public: virtual void print() final { cout 이렇게 final을 해주면 밑에서 override를 해주지 못하도록 막아버리는 것입니다. 이렇게 뒤면 밑에 override하는 것들이 다 막히는 것을 볼 수 있습니다.  가상소멸#include using namespace std;class Base{public: ~Base() { cout 이렇게 할경우 메모리 누수가 발생하게 됩니다. Derived를 소멸자 작업을 하지 않았기 때문인데요. class Base{public: virtual ~Base() { cout 여기서 ~Base를 virtual로 만들어주면 정상적으로 자식 소멸자가 실행되고 부모클래스가 실행이 되는 것을 볼 수 있습니다.

[c++] virtual 함수

#include using namespace std;class A{public: void print() { cout 여기서 ref.print()를 하면 A가 나옵니다. B가 나올 것 같은데 A가 나오는 것을 볼 수 있으며 c를 넣어도, d를 넣어도 똑같이 A가 나옵니다.  Virtual 사용#include using namespace std;class A{public: virtual void print() { cout 하지만 virtual로 넣어주면 B가 나오는 것을 볼 수 있습니다. 이렇게 작동하는구나 라는 것을 알아두시면 됩니다.  class C : public B{public: virtual void print() { cout 이렇게 virtual 간에 타입이 다르다면 오류가 뜨는데요. return..

[c++] 상속받은 함수를 오버라이딩 하기

#include using namespace std;class Base{protected: int m_i;public: Base(int value) : m_i(value) {} void print() { cout   cout (b)이렇게 해주면 위에 있는 operator  상속받은 함수를 감추기using Base::m_i; 이것을 Derived에 넣어주면 m_i가 Derived안에서 public이 되어 버립니다. 이것이 상속된 유도 클래스에서 바꿀 수도 있습니다. class Derived : public Base{private: double m_d;public: Derived(int value) : Base(value) {} using Base::m_i;};이렇게 사용해주면 되는 것입니다. 그러면 ..

[c++] 따배시 상속과 접근 지정자

class Base{public: int m_public;protected: int m_protected;private: int m_private;};int main(){ Base base; base.m_public = 123; base.m_protected = 123;}protected는 class 밖에서 접근을 할려하니 오류가 발생합니다. base.m_protected는 불가능한데요. 당연히 private는 안되는 것을 알고 계실 것이라 생각합니다.  protected는 상속된 곳에서 접근이 되느냐 안되느냐가 public이랑 차이입니다. #include using namespace std;class Base{public: int m_public;protected: int m_protected;priv..