본문 바로가기

백준코딩/브론즈

백준 4344번(평균은 넘겠지) - Java, Python, C#

바로가기


문제

순서도(플로우 차트)

자바

파이썬

C#

 

문제


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;
                }

            }
        }
    }
}