#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(void){
// test case num calculate
int test_case_num;
cin >> test_case_num;
// Percent store
double percent_save[test_case_num];
// Calculate each line
for(int i = 0; i < test_case_num; i++){
int check_case_num;
cin >> check_case_num; // how many number in the line
int check_sum = 0;
int check_save[1000] = {0};// value save
for (int j = 0; j <check_case_num; j++){
int check_value;
cin >> check_value;
check_save[j] = check_value; //save it
check_sum += check_value; // sum
}
int data_above_mean = 0; //define mean value
double check_mean = (double) check_sum / check_case_num;
for (int j = 0; j < check_case_num; j++){
if (check_save[j] > check_mean){
data_above_mean += 1;
}
}
double data_percent = ((double) data_above_mean / check_case_num) * 100 ;
percent_save[i] = data_percent; // percent save
}
// print percent values
for(int i = 0; i < test_case_num; i++){
cout << fixed;
cout.precision(3);
cout << percent_save[i];
cout << "%\n";
}
return 0;
}
그다지 어려운 문제는 아니나 동적할당이 필요한 이유에 대해서 느낄 수 있는 중요한 문제이다.
26번째 줄에서 check_save 배열을 선언해서 최종적으로 평균값을 넘는지를 비교하는 것이 목표인데
python 같은 경우는 미리 배열의 크기를 결정짓는 방식이 아니고 추가적으로 append시킬 수 있는것과 달리 cpp에서는 미리 구획을 해놓아야 한다. 즉 안쪽 이중 for문이 끝났다고 하여 check_save가 없어지는 것이 아니므로 그 과정에서 배열의 크기를 변동시키지 못한다.