한참 헤메었다.
Visual Studio에서 디버깅 하면서 진행하였다.
소수점 3자리까지 반올림해서 표시하는 부분에서 많이 막혔다.
using System;
class Program
{
public class TestCaseData
{
public int total = 0;
public int[] scoresArray = null;
public double average = 0f;
public double overAverageRate = 0f;
}
static void Main(string[] args)
{
string stringTestCase = Console.ReadLine();
int intTestCase = System.Convert.ToInt32(stringTestCase);
TestCaseData[] datasArray = new TestCaseData[intTestCase];
// 데이터 입력
for (int i = 0; i < intTestCase; i++)
{
string stringCase = Console.ReadLine();
string[] splitStrings = stringCase.Split(' ', StringSplitOptions.None);
int number = System.Convert.ToInt32(splitStrings[0]);
TestCaseData data = new TestCaseData();
data.total = number;
data.scoresArray = new int[number];
for (int j = 1; j <= number; j++)
{
data.scoresArray[j - 1] = System.Convert.ToInt32(splitStrings[j]);
}
datasArray[i] = data;
}
// 평균 구하기
for (int i = 0; i < datasArray.Length; i++)
{
int totalScore = 0;
for (int k = 0; k < datasArray[i].scoresArray.Length; k++)
{
totalScore += datasArray[i].scoresArray[k];
}
double average = (double)totalScore / (double)datasArray[i].total;
//Console.WriteLine("average = " + average);
datasArray[i].average = average;
}
// 평균을 넘는 학생들의 비율 계산
for (int i = 0; i < datasArray.Length; i++)
{
int overCount = 0;
for (int j = 0; j < datasArray[i].scoresArray.Length; j++)
{
if (datasArray[i].average < datasArray[i].scoresArray[j])
{
overCount++;
}
}
datasArray[i].overAverageRate = (double)overCount / (double)datasArray[i].total * 100f;
}
// 비율 출력
for (int i = 0; i < datasArray.Length; i++)
{
string result = string.Format("{0:f3}%", datasArray[i].overAverageRate);
Console.WriteLine(result);
}
}
}
문제 출처
https://www.acmicpc.net/problem/4344
'ComputerScience > Coding Test' 카테고리의 다른 글
백준 7287번: 등록 (0) | 2022.11.12 |
---|---|
백준 10699번: 오늘 날짜 (0) | 2022.11.11 |
백준 8958번: OX퀴즈 (0) | 2022.11.10 |
백준 1546번: 평균 (0) | 2022.11.10 |
백준 10807번: 개수 세기 (0) | 2022.11.10 |