29. Hotel Prices
[ 난이도: Medium | 분야: Debugging ]
1. 과제
이번 챌린지에서는 제공된 모든 테스트 파일들을 성공적으로 실행하기 위한 코드를 디버깅하는 것이다.
기본적인 호텔방과 호텔 아파트를 나타내는 HotelRoom 클래스와 HotelApartment가 있다.
이 클래스들은 두 파라미터를 가진다: bedrooms 그리고 bathrooms
각각 방의 침실 수와 화장실 수를 나타낸다.
기본적인 호텔 방과 호텔 아파트 가격은 다음과 같다:
- 호텔 방: 50 침실 + 100 화장실
- 호텔 아파트: 같은 침실, 화장실의 수를 갖는다고 가정한다면 100 정도 비싸다
예를 들어, 만약 기본 방의 가격이 200이라면, 같은 수의 침실과 화장실이 있는 아파트는 가격이 300이다.
호텔의 codebase에는 오늘 예약된 방 리스트를 읽는 코드가 있고 호텔 수익의 총액을 계산 해준다.
하지만, 계산된 수익은 간혹 원래보다 작게 나올 때가 있다.
HotelRoom 클래스와 HotelApartment 클래스의 implementation을 디버기하여 수익의 총액을 올바르게 계산하도록 하라.
이 챌린지의 함수는 여러 케이스에 대입될 예정이다.
입력 형식
입력은 코드 탬플릿의 잠겨있는 부분에서 읽는다.
첫 번째 줄은, 오늘 예약된 방의 개수인 n을 가지고 있다.
이후 n개의 줄이 있다. 각 줄들은 room_type으로 시작한다.(standard와 apartment 중 하나를 갖는다.) 그리고 이 방이 갖고 있는 침실의 개수와 화장실의 개수가 이어서 나온다.
제약 사항
n은 1보다 크거나 같고 100보다 작거나 같다.
각 방에는 최소 1개, 최대 5개의 침실이 있다.
각 방에는 최소 1개, 최대 5개의 화장실이 있다.
출력 형식
출력은 코드 탬플릿의 잠겨 있는 부분에서 처리해준다. 입력에서 읽어온 모든 방의 벡터들로부터 반복하며 총 수익을 계산한다.
입력 예시0
2
standard 3 1
apartment 1 1
출력 예시0
500
설명0
샘플에서 우리는 침실 3개와 화장실 한 개를 가지고 있는 한 개의 standard room과 한 개의 침실과 한 개의 화장실이 있는 아파트가 있다. standard room의 가격은 3*50 + 100 = 250이다. 아파트의 가격은 50 + 100 + 100 = 250이다.
따라서 호텔의 수익은 250 + 250 = 500이다.
문제
#include <iostream>
#include <vector>
using namespace std;
class HotelRoom {
public:
HotelRoom(int bedrooms, int bathrooms)
: bedrooms_(bedrooms), bathrooms_(bathrooms) {}
int get_price() {
return 50*bedrooms_ + 100*bathrooms_;
}
private:
int bedrooms_;
int bathrooms_;
};
class HotelApartment : public HotelRoom {
public:
HotelApartment(int bedrooms, int bathrooms)
: HotelRoom(bedrooms, bathrooms) {}
int get_price() {
return HotelRoom::get_price() + 100;
}
};
int main() {
int n;
cin >> n;
vector<HotelRoom*> rooms;
for (int i = 0; i < n; ++i) {
string room_type;
int bedrooms;
int bathrooms;
cin >> room_type >> bedrooms >> bathrooms;
if (room_type == "standard") {
rooms.push_back(new HotelRoom(bedrooms, bathrooms));
} else {
rooms.push_back(new HotelApartment(bedrooms, bathrooms));
}
}
int total_profit = 0;
for (auto room : rooms) {
total_profit += room->get_price();
}
cout << total_profit << endl;
for (auto room : rooms) {
delete room;
}
rooms.clear();
return 0;
}
정답
#include <iostream>
#include <vector>
using namespace std;
class HotelRoom {
public:
HotelRoom(int bedrooms, int bathrooms)
: bedrooms_(bedrooms), bathrooms_(bathrooms) {}
virtual int get_price() {
return 50*bedrooms_ + 100*bathrooms_;
}
private:
int bedrooms_;
int bathrooms_;
};
class HotelApartment : public HotelRoom {
public:
HotelApartment(int bedrooms, int bathrooms)
: HotelRoom(bedrooms, bathrooms) {}
int get_price() {
return HotelRoom::get_price() + 100;
}
};
int main() {
int n;
cin >> n;
vector<HotelRoom*> rooms;
for (int i = 0; i < n; ++i) {
string room_type;
int bedrooms;
int bathrooms;
cin >> room_type >> bedrooms >> bathrooms;
if (room_type == "standard") {
rooms.push_back(new HotelRoom(bedrooms, bathrooms));
} else {
rooms.push_back(new HotelApartment(bedrooms, bathrooms));
}
}
int total_profit = 0;
for (auto room : rooms) {
total_profit += room->get_price();
}
cout << total_profit << endl;
for (auto room : rooms) {
delete room;
}
rooms.clear();
return 0;
}
©️Hackerrank. All Rights Reserved.
'프로그래밍 언어 > C, C++' 카테고리의 다른 글
[Hackerrank] 31. Rectangle Area (0) | 2024.02.26 |
---|---|
[Hackerrank] 30. Cpp exception handling (2) | 2024.02.26 |
[Hackerrank] 28. Inheritance Introduction (0) | 2024.02.23 |
[Hackerrank] 27. Deque-STL (0) | 2024.02.22 |
[Hackerrank] 26. Print Pretty (0) | 2024.02.21 |