<문제4344> : 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다.
당신은 그들에게 슬픈 진실을 알려줘야 한다.
<입력> : 첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고,
이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
<출력> : 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
<중요한 포인트>
1. 예를 들어 평균 70점일때 70점인 학생은 평균에 속하지 않는다. 즉 평균 초과값만 평균을 넘는다고 판단해야한다.
2. 소수점 셋째 자리까지 출력 : F2 사용.
3. 첫째 줄에 총 몇개의 Line을 뽑아낼지 만들고, 각 줄 첫번째 마다 몇개의 과목을 봤는지 숫자를 정해주고, 숫자만큼 점수를 입력 받아야한다.
// 첫째줄 C 입력값 작성
int C = int.Parse(Console.ReadLine());
//첫째 줄 만큼 문장을 개행해서 만들어줘야한다.
for (int i = 0; i < C; i++)
{
// 각 줄 마다 입력값 받기
string[] subject = Console.ReadLine().Split(" ");
int[] score = new int[subject.Length];
// []안에는 상수만 가능하다.
// 그래서 subject.Length를 하면 내가 입력한 개수만큼 길이가 생성된다.
// 6개를 입력하면 길이는 6, 7개를 입력하면 길이는 7이 되는것이다.
// 타입의 개념이 부족해서 헷갈리는 것이다.
int sum = 0; // 매번 초기화를 시켜줘야 개행되는 값들과 겹치지 않는다.
int realSum = 0; // 매번 초기화를 시켜줘야 개행되는 값들과 겹치지 않는다.
int average = 0; // 매번 초기화를 시켜줘야 개행되는 값들과 겹치지 않는다.
int num = 0; // 매번 초기화를 시켜줘야 개행되는 값들과 겹치지 않는다.
double result = 0; // 매번 초기화를 시켜줘야 개행되는 값들과 겹치지 않는다.
// 평균값 찾기
for (int j = 0; j < subject.Length; j++)
{
score[j] = int.Parse(subject[j]);
sum += score[j]; // 입력 된 값 다 더하기
realSum = sum - score[0]; // 입력 된 값에서 총 인원수가 저장된 score[0]을 빼주기
average = realSum / score[0]; // 평균값
}
// 평균값 초과된 정수의 개수 찾기
for(int a = 1; a < subject.Length; a++)
// 인덱스 0 부터 시작하면 인원수가 포함됩니다. 인원수의 범위는 1000명까지라서 문제가 됩다.
// 그러니 인덱스 1부터 시작해서 인원수를 입력받는 인덱스 0을 제외시켜줍니다.
{
if (score[a] > average)
{
num++;
}
}
// num이 정수라면 0.1 ~ 0.9의 값들은 0이 나옵니다. 왜냐면 정수는 소주점을 다 버립니다.
//그래서 double로 형변환 해줘야합니다.
// 정수는 소주점 밑은 다 버립니다 꼭 기억합시다!!!!!!!
result = ((double)num / score[0]) * 100;
Console.WriteLine($"{result:F3}");
}