바로가기
문제
https://www.acmicpc.net/problem/4344
4344번: 평균은 넘겠지
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. 정답과 출력값의 절대/상대 오차는 10-3이하이면 정답이다.
www.acmicpc.net
문제 요약
테스트 반복 수 C와 반복 수 마다 학생의 수(n) + n명의 점수가 주어진다. 평균이 넘는 학생들의 비율을 반올림하고 소수점 셋째 자리까지 출력한다.
입력값
테스트 반복 수 C
학생 수(n)과 학생들의 점수 문자열
출력값
평균이 넘는 학생들의 비율
순서도
1. 테스트 반복 수 입력 받기
2. 학생 수 n + n 명의 점수 문자열을 배열로 입력 받기
3. 점수 배열 만들기
4. 점수 평균 구하기
5. 평균 이상인 학생들 구하기
6. 평균 이상 학생 수 / 전체 학생 수 비율 구하기
자바
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
int c = Integer.parseInt(reader.readLine());
while (true) {
int sum = 0, cnt = 0;
double average = 0;
// 학생 수 와 점수 입력 받기
String[] arr = reader.readLine().split(" ");
// 점수 배열 만들기
int[] scoreArr = new int[arr.length - 1];
for (int i = 0; i<scoreArr.length; i++) {
scoreArr[i] = Integer.parseInt(arr[i+1]);
sum += scoreArr[i];
}
// 점수 평균 구하기, 반올림을 위해 Math.round를 사용
average = (double) sum / scoreArr.length;
// 평균 이상인 학생 수 구하기, for-each문으로 간결하게 표현
for (int score : scoreArr) {
if (score > average) {
cnt += 1;
}
}
double ratio = ((double) cnt / scoreArr.length) * 100;
// 평균 이상인 학생 수의 비율 구하기
// %.3f%%%n = 3f%(소수점 3자리) + %%(%를 출력) + %n(줄 바꿈)
System.out.printf("%.3f%%%n", ratio);
// 한번 돌 때 마다 테스트 개수 -1하고 0일 경우 종료
c -= 1;
if (c == 0) {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
파이썬
c = int(input())
while (True):
sum = 0
cnt = 0
# 문자열 입력 받기
str = input()
# 학생들의 점수와 학생 수 분리
strArr = str.split();
studentNumber = int(strArr[0])
del strArr[0]
# 학생들의 점수 평균 구하기
for score in strArr:
sum += int(score)
average = sum / studentNumber
# 평균 이상인 학생들의 수 저장
for i in range(studentNumber):
if int(strArr[i]) > average:
cnt += 1
# 평균 이상인 학생들의 비율을 소수점 셋째 자리까지 출력
print(f"{(cnt / studentNumber) * 100:.3f}%")
c -= 1
if (c == 0):
break
C#
namespace Baekjoon
{
internal class Program
{
static void Main(string[] args)
{
int c = int.Parse(Console.ReadLine());
while(true)
{
string str = Console.ReadLine();
int cnt = 0, sum = 0;
// 점수 배열 만들기
string[] strArr = str.Split();
int[] scoreArr = new int[strArr.Length - 1];
for (int i = 0; i < scoreArr.Length; i++)
{
scoreArr[i] = int.Parse(strArr[i + 1]);
sum += scoreArr[i];
}
// 평균 점수 구하기
double average = (double)sum / scoreArr.Length;
// 평균 이상인 학생 수 구하기
for (int i=0; i<scoreArr.Length; i++)
{
if (scoreArr[i] > average)
{
cnt++;
}
}
double ratio = ((double)cnt / scoreArr.Length) * 100;
// 소수점 셋째 자리 지정
string formattedRatio = ratio.ToString("F3");
Console.WriteLine(formattedRatio + "%");
c--;
if (c == 0)
{
break;
}
}
}
}
}
'백준코딩 > 브론즈' 카테고리의 다른 글
백준 2525번(오븐 시계) - Java, Python, C# (2) | 2023.12.13 |
---|---|
백준 8958번(OX퀴즈) - Java, Python, C# (0) | 2023.12.01 |
백준 1152번(단어의 개수) - Java, Python, C# (2) | 2023.11.23 |
백준 2562번(최댓값) - Java, Python, C# (0) | 2023.11.07 |
백준 2588번(곱셈) - Java, Python, C# (0) | 2023.10.30 |