HackerRank_Box It!

와다닥·2022년 10월 13일
0

[C++] 문제풀기

목록 보기
2/7
post-custom-banner

HackerRank
Prepare > C++ > Classes > Box It!


문제 설명

Design a class named Box whose dimensions are integers and private to the class. The dimensions are labelled: length l, breadth b, and height h.

The default constructor of the class should initialize l, b, and h to 0.

The parameterized constructor Box(int length, int breadth, int height) should initialize Box's l, b and h to length, breadth and height.

The copy constructor Box(Box B) should set l, b and h to B's l, b and h, respectively.

Apart from the above, the class should have 4 functions:

int getLength() - Return box's length
int getBreadth() - Return box's breadth
int getHeight() - Return box's height
long long CalculateVolume() - Return the volume of the box
Overload the operator for the class Box. Box A < Box B if:

  1. A.l < B.l
  2. A.b < B.b and A.l == B.l
  3. A.h < B.h and A.b == B.b and A.l == B.l
    Overload operator << for the class Box().
    If B is an object of class Box:

cout << B should print B.l, B.b and B.h on a single line separated by spaces.

For example,

Box b1; // Should set b1.l = b1.b = b1.h = 0;
Box b2(2, 3, 4); // Should set b1.l = 2, b1.b = 3, b1.h = 4;
b2.getLength();	// Should return 2
b2.getBreadth(); // Should return 3
b2.getheight();	// Should return 4
b2.CalculateVolume(); // Should return 24
bool x = (b1 < b2);	// Should return true based on the conditions given
cout<<b2; // Should print 2 3 4 in order.

문제 조건

  • 0 ≤ l, b, h ≤ 10^5
  • Two boxes being compared using the < operator will not have all three dimensions equal.

코드

class Box {
	int l, b, h;

public:
	Box() : l(0), b(0), h(0) {};
	Box(int length, int breadth, int height) : l(length), b(breadth), h(height) {};
	Box(Box& B) {
		l = B.getLength();
		b = B.getBreadth();
		h = B.getHeight();
	};
	int getLength() {
		return l;
	}
	int getBreadth() {
		return b;
	}
	int getHeight() {
		return h;
	}
	long long CalculateVolume() {
		return (long long) l * b * h;
	}
	bool operator<(Box& b) {
		if (l < b.getLength()) {
			return true;
		}
		else if (this->b < b.getBreadth() && l == b.getLength()) {
			return true;
		}
		else if (h < b.getHeight() && this->b == b.getBreadth() && l == b.getLength()) {
			return true;
		}
		else {
			return false;
		}
	}
};

ostream& operator<<(ostream& out, Box& B) {
	out << B.getLength() << " " << B.getBreadth() << " " << B.getHeight();
	return out;
}

전체 코드

#include<bits/stdc++.h>
using namespace std;

class Box {
	int l, b, h;

public:
	Box() : l(0), b(0), h(0) {};
	Box(int length, int breadth, int height) : l(length), b(breadth), h(height) {};
	Box(Box& B) {
		l = B.getLength();
		b = B.getBreadth();
		h = B.getHeight();
	};
	int getLength() {
		return l;
	}
	int getBreadth() {
		return b;
	}
	int getHeight() {
		return h;
	}
	long long CalculateVolume() {
		return (long long) l * b * h;
	}
	bool operator<(Box& b) {
		if (l < b.getLength()) {
			return true;
		}
		else if (this->b < b.getBreadth() && l == b.getLength()) {
			return true;
		}
		else if (h < b.getHeight() && this->b == b.getBreadth() && l == b.getLength()) {
			return true;
		}
		else {
			return false;
		}
	}
};

ostream& operator<<(ostream& out, Box& B) {
	out << B.getLength() << " " << B.getBreadth() << " " << B.getHeight();
	return out;
}

void check2()
{
	int n;
	cin >> n;
	Box temp;
	for (int i = 0; i < n; i++)
	{
		int type;
		cin >> type;
		if (type == 1)
		{
			cout << temp << endl;
		}
		if (type == 2)
		{
			int l, b, h;
			cin >> l >> b >> h;
			Box NewBox(l, b, h);
			temp = NewBox;
			cout << temp << endl;
		}
		if (type == 3)
		{
			int l, b, h;
			cin >> l >> b >> h;
			Box NewBox(l, b, h);
			if (NewBox < temp)
			{
				cout << "Lesser\n";
			}
			else
			{
				cout << "Greater\n";
			}
		}
		if (type == 4)
		{
			cout << temp.CalculateVolume() << endl;
		}
		if (type == 5)
		{
			Box NewBox(temp);
			cout << NewBox << endl;
		}

	}
}

int main()
{
	check2();
}

입력

5
2 3 4 5
4
5
4
2 4 6 7

출력

3 4 5
60
3 4 5
60
4 6 7
profile
I can't die I'm ALL IN
post-custom-banner

2개의 댓글

comment-user-thumbnail
2022년 10월 13일

class 생성 기억하기!
operator overloading 기억하기!

overloading은 이름은 같지만 type 또는 parameter 취급이 다른 함수를 정의하는 것, overriding은 자식이 부모의 함수 작동 방식을 재정의하는 것이다. overriding된 함수는 자식 클래스 내에서 동일 이름을 사용하였을 때 가장 우선적으로 호출된다.

답글 달기
comment-user-thumbnail
2022년 10월 13일

(해결) 얼레... 계속 Case3에서 틀리는데, type 2로 1039 3749 8473을 한 뒤 type 4에서 음수값(쓰레기 값인 것 같음)이 나온다... 그 뒤에 있는 type 2 4839 283 273 뒤 type 4는 정상적으로 답이 나오는데 이유를 모르겠다.

-> 기본적으로 l * b * h를 int 값 세 개의 연산으로 처리하기 때문에 앞에 (long long)을 넣어주면 정상적으로 처리된다.

답글 달기