n명의 학생이 각각 5개 과목에 대한 점수를 가지고 있다고 가정해 보겠습니다. 첫 번째 점수 집합은 Kamal의 것이며, 나머지 n-1개의 점수 집합은 다른 학생들의 것입니다. 이때 Kamal보다 총점이 더 높은 학생이 몇 명인지 구해야 합니다.
이 문제를 해결하기 위해 Student라는 클래스를 정의합니다. 이 클래스는 각 학생의 점수를 저장하며, input() 함수로 점수를 입력받고 calculateTotalScore() 함수로 5개 과목의 총점을 계산하는 역할을 담당합니다.
예를 들어 입력이 n = 4이고 scores = [[25,45,32,42,30], [22,25,41,18,21], [37,42,48,45,25], [36,48,35,40,30]]라고 한다면, 마지막 두 학생의 총점이 Kamal보다 높으므로 출력은 2가 됩니다.
문제 해결 접근 방법
이 문제는 다음 단계를 따라 해결할 수 있습니다.
s := Student 타입 객체 배열을 n개 요소로 생성
i := 0부터 시작해 i < n일 때까지 반복하며(반복마다 i를 1씩 증가):
scores[i]의 모든 점수를 s[i]에 저장
kamal_sc := s[0]의 총점 계산
count := 0으로 초기화
i := 1부터 시작해 i < n일 때까지 반복하며(반복마다 i를 1씩 증가):
total := s[i]의 총점 계산
만약 total > kamal_sc라면:
(count를 1 증가)
count 반환
예제 코드
아래 구현 예제를 통해 더 잘 이해해 보겠습니다.
#include <iostream>
#include <vector>
using namespace std;
class Student{
public:
int score[5];
void input(vector<int> v){
for(int i = 0; i < 5; i++)
score[i] = v[i];
}
int calculateTotalScore(){
int res = 0;
for(int i = 0; i < 5; i++)
res += score[i];
return res;
}
};
int main(){
int n = 4;
vector<vector<int>> scores = {{25,45,32,42,30},{22,25,41,18,21},{37,42,48,45,25},{36,48,35,40,30}};
Student *s = new Student[n];
for(int i = 0; i < n; i++){
s[i].input(scores[i]);
}
int kamal_sc = s[0].calculateTotalScore();
int count = 0;
for(int i = 1; i < n; i++){
int total = s[i].calculateTotalScore();
if(total > kamal_sc){
count++;
}
}
cout << count;
}입력
4, {{25,45,32,42,30}, {22,25,41,18,21}, {37,42,48,45,25}, {36,48,35,40,30}}출력
2