반응형

IT 프로그래밍 376

[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++] Generic 프로그래밍과 Template

int compare(string& v1, string& v2){ if (v1 기능적으로 같지만 타입이 다르기 때문에 이렇게 세개의 함수를 만들어주고 있습니다. 정수는 정수, 실수는 실수, 문자열은 문자열 이런식으로 되어 있는데요. 논리적으로는 완전히 똑같은데 데이터의 타입이 다르기 때문에 이렇게 해주는 것입니다. 이것은 똑같은 로직인데 데이터의 타입이 다르다는 이유만으로 똑같은 함수 여러개를 만들어야 한다는 것은 조금 짜증나는 일입니다.  그래서 c++은 template를 제공하는데요. Templatetemplate int compare(T& v1, T& v2){ if (v1 template는 실제 객체가 아니라 실제 객체의 틀이라고 보면 됩니다. 붕어빵이 있을 때 붕어빵을 만드는 틀이라고 생각하시면 ..

[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..

반응형