본문 바로가기
Programming/Code Challenge

[C++ HackerRank 코드 챌린지] Day 12: Inheritance (상속)

by 항공학도 2020. 5. 16.

계속해서 HackerRank 30 days of code에 속한 문제중 Day 12: Inheritance (상속)에 관해 풀어보도록 하겠습니다.

저의 코드는 github에 올려 두었으니 참고하시면 좋겠습니다.

먼저 person과 student라는 two class가 주어집니다. 이때 person은 base class, student는 derived class 입니다.

person 클래스에 관한 코드는 작성이 되어있고, student class또한 선언은 되어 있는 상태입니다. 이때 student 클래스는 person의 모든 속성을 상속 받습니다 (Student inherits all the properties of Person).

이제 다음과 같이  4개의 파라미터를 갖는 student class를 완성 시키면 됩니다.

여기서 char calculate()는 student  객체의 average를 계산하고 그에 따른 char형 grade를 다음과 같이 return합니다.

먼저 문제에서 base class인 Person class는 다음과 같이 선언되어 있습니다.

class Person{
	protected:
		string firstName;
		string lastName;
		int id;
	public:
		Person(string firstName, string lastName, int identification){
			this->firstName = firstName;
			this->lastName = lastName;
			this->id = identification;
		}
		void printPerson(){
			cout<< "Name: "<< lastName << ", "<< firstName <<"\nID: "<< id << "\n"; 
		}
	
};

이 Person class를 상속받아 student class에서는 계산된 grade를 프린트 하면됩니다. main함수 구성은 다음과 같습니다.

int main() {
	string firstName;
  	string lastName;
	int id;
  	int numScores;
	cin >> firstName >> lastName >> id >> numScores;
  	vector<int> scores;
  	for(int i = 0; i < numScores; i++){
	  	int tmpScore;
	  	cin >> tmpScore;
		scores.push_back(tmpScore);
	}
	Student* s = new Student(firstName, lastName, id, scores);
	s->printPerson();
	cout << "Grade: " << s->calculate() << "\n";
	return 0;
}

입력되는 numScore의 크기만큼 score에 성적이 입력되고 이는 student의 입력값으로 들어갑니다.이 score의 평균값을 구해 grade 표에따른 grade를 return하면 됩니다.

class Student :  public Person{
	private:
		vector<int> testScores;  
	public: 
        vector<int> scores;
        Student(string firstName, string lastName, int id, vector<int> scores):Person(firstName, lastName, id){
            this->firstName =firstName;
            this->lastName = lastName;
            this->id = id;
            this->scores = scores;
        }
       
        char calculate(){
            
            int average = 0;
            for(auto i:scores){
                average +=i;
            }
            average = average/scores.size();
            
            if (average >= 90 && average <= 100)
                return 'O';
            else if (average >= 80 && average < 90)
                return 'E';
            else if (average >= 70 && average < 80)
                return 'A';
            else if (average >= 55 && average < 70)
                return 'P';
            else if (average >= 40 && average < 55)
                return 'D';
            else
                return 'T';
        }
};

댓글