<알고리즘 문제풀이&연습>/[C++] 백준, 프로그래머스 등등

[C++ operator overloading] Box it! (클래스, 연산자 오버로딩)

BlockDMask 2018. 12. 1. 00:19
반응형

0) 제목

  • Hackerrank 의 C++>Classes 부분의 Box it! 문제입니다.

  • C++ 이용하여 풀었습니다.

1) 문제설명

  • 박스의 크기를 구하는 간단한 문제입니다.

  • 주어진 문제에 맞게 클래스를 만들고

  • 문제에서 요구하는데로 연산자 오버로딩(operator overloading)을 만들면 됩니다.

  • 헤더파일과, 이름공간 및 main 함수는 hackerrank 에서 제공이 됩니다

2) 풀이과정

  • 문제의 설명을 따라가면서 클래스를 만들고 그 안에 멤버 변수와 멤버 함수를 만듭니다.

  • 또한, 문제에서 요구하는 연산자 오버로딩을 만듭니다.

  • 하나의 Test case에서 오류의 원인은 long long CalculateVolume() 함수 였습니다. 

  • 이 함수는 int 값 l, b, h를 곱해서 long long 타입으로 반환하는 함수입니다.

  • 이때, return l*b*h 로 간단하게 생각하고 넘어가서, 오류가 발생했었습니다.

  • int를 세번 곱한 것이 int의 값의 범위를 넘을 수 있다는 생각을 하지 못했었습니다.

  • 그렇기 때문에 아래의 코드 처럼 long long의 변수를 초기화 하고 int 값을 각각 곱해주는 방식을 취했습니다.

3) 함수설명

  • 간단한 코드 이므로 생략하겠습니다.


4) 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
class Box{
private:
    int l;
    int b;
    int h;
public:
    //생성자
    Box(){
        l=0;
        b=0;
        h=0;
    }
    //생성자2    
    Box(int l,int b,int h):l(l), b(b), h(h) { }
    
    //복사 생성자 (동적할당할 것이 없으므로, 얕은 복사생성자)
    Box(Box &box): l(box.l), b(box.b), h(box.h){ }
    
    int getLength() const{
        return l;
    }
    int getBreadth () const{
        return b;    
    }
    int getHeight () const{
        return h;
    }
    long long CalculateVolume(){
        long long vol = 1;
        vol *= l;
        vol *= b;
        vol *= h;
        return vol;
    }
    
    bool operator<(Box& b){
       if(this->getLength() < b.getLength()){
                return true;
       }else if(this->getBreadth() < b.getBreadth() 
                    && this->getLength() == b.getLength()){
                return true;
       }else if(this->getHeight() < b.getHeight() 
                    && this->getBreadth() == b.getBreadth() 
                    && this->getLength() == b.getLength()){
                return true;
       }
        
       return false;
   }
};
 
ostream& operator<<(ostream& out, Box& B){
    out << B.getLength() << " " << B.getBreadth() << " " << B.getHeight();
    return out;
}
cs


5) 인증


경로 : Dashboard>C++>Classes>Box it!

출처 : [HackerRank] https://www.hackerrank.com/challenges/box-it/

더 나은 코드로 보완 할 곳이 있으면 말씀해주세요.

부족한 코드 많은 지적 부탁드립니다.

반응형