35. Accessing Inherited Functions
[ 난이도: Medium | 분야: Inheritance]
1. 과제
문제에서 클래스 A, B 그리고 C가 주어진다. 모든 세 클래스는 그들만의 함수를 가지고 있다.
클래스 A에는 받아온 파라미터에 2를 곱한다.
class A
{
public:
A(){
callA = 0;
}
private:
int callA;
void inc(){
callA++;
}
protected:
void func(int & a)
{
a = a * 2;
inc();
}
public:
int getA(){
return callA;
}
};
클래스 B에는 받아온 파라미터에 3을 곱한다.
class B
{
public:
B(){
callB = 0;
}
private:
int callB;
void inc(){
callB++;
}
protected:
void func(int & a)
{
a = a * 3;
inc();
}
public:
int getB(){
return callB;
}
};
클래스 C에는 받아온 파라미터에 5를 곱한다.
class C
{
public:
C(){
callC = 0;
}
private:
int callC;
void inc(){
callC++;
}
protected:
void func(int & a)
{
a = a * 5;
inc();
}
public:
int getC(){
return callC;
}
};
주어진 클래스 D는 아래와 같다:
class D
{
int val;
public:
//Initially val is 1
D()
{
val = 1;
}
//Implement this function
void update_val(int new_val)
{
}
//For Checking Purpose
void check(int); //Do not delete this line.
};
클래스 D를 수정하고 update_val 함수를 implement하여 오직 클래스 A, B 그리고 C에서 정의한 함수만을 가지고 함수를 불러와 값을 조정하여 new_val을 구한다.
new_val은 오직 2,3 그리고 5만을 prime factor로 받는 것이 보장되어 있다.
입력 형식
클래스 D의 update_val 함수를 implement하라. 이 함수는 오직 A, B 그리고 C의 함수만을 이용하여 업데이트한다.
제약 사항
new_val은 1보다 크거나 같고 10,000보다 작거나 같다.
주의: new_val은 2,3 그리고 5만을 prime factor로서 취한다.
입력 예시
new_val = 30
출력 예시
A's func will be called once.
B's func will be called once.
C's func will be called once.
설명
초기에, val = 1이다.
A의 함수는 한 번 불리운다.
val = val * 2
val = 2
B의 함수가 한 번 불리운다.
val = val * 3
val = 6
C의 함수가 한 번 불리운다.
val = val*5
val = 30
문제
class D
{
int val;
public:
//Initially val is 1
D()
{
val = 1;
}
//Implement this function
void update_val(int new_val)
{
}
//For Checking Purpose
void check(int); //Do not delete this line.
};
void D::check(int new_val)
{
update_val(new_val);
cout << "Value = " << val << endl << "A's func called " << getA() << " times " << endl << "B's func called " << getB() << " times" << endl << "C's func called " << getC() << " times" << endl;
}
int main()
{
D d;
int new_val;
cin >> new_val;
d.check(new_val);
}
더보기
정답
#include<iostream>
using namespace std;
class A
{
public:
A(){
callA = 0;
}
private:
int callA;
void inc(){
callA++;
}
protected:
void func(int & a)
{
a = a * 2;
inc();
}
public:
int getA(){
return callA;
}
};
class B
{
public:
B(){
callB = 0;
}
private:
int callB;
void inc(){
callB++;
}
protected:
void func(int & a)
{
a = a * 3;
inc();
}
public:
int getB(){
return callB;
}
};
class C
{
public:
C(){
callC = 0;
}
private:
int callC;
void inc(){
callC++;
}
protected:
void func(int & a)
{
a = a * 5;
inc();
}
public:
int getC(){
return callC;
}
};
class D : A, B, C
{
int val;
public:
//Initially val is 1
D()
{
val = 1;
}
//Implement this function
void update_val(int new_val)
{
int iterA = 0; int iterB = 0; int iterC = 0;
while(new_val % 5 == 0) {
C::func(val);
new_val = new_val / 5;
}
while(new_val % 3 == 0) {
B::func(val);
new_val = new_val / 3;
}
while(new_val % 2 == 0) {
A::func(val);
new_val = new_val / 2;
}
}
//For Checking Purpose
void check(int); //Do not delete this line.
};
void D::check(int new_val)
{
update_val(new_val);
cout << "Value = " << val << endl << "A's func called " << getA() << " times " << endl << "B's func called " << getB() << " times" << endl << "C's func called " << getC() << " times" << endl;
}
int main()
{
D d;
int new_val;
cin >> new_val;
d.check(new_val);
}
©️Hackerrank. All Rights Reserved.
'프로그래밍 언어 > C, C++' 카테고리의 다른 글
[Hackerrank] 37. C++ Class Templates (0) | 2024.03.01 |
---|---|
[Hackerrank] 36. Magic Spells (3) | 2024.02.29 |
[Hackerrank] 34. Messages Order (2) | 2024.02.27 |
[Hackerrank] 33. Overloading Ostream Operator (0) | 2024.02.27 |
[Hackerrank] 32. Multi Level Inheritance (0) | 2024.02.27 |