본문 바로가기

문제풀기/백준 문제풀이

[백준 문제 4344번] 평균은 넘겠지 문제

728x90
반응형

https://www.acmicpc.net/problem/4344

 

4344번: 평균은 넘겠지

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

www.acmicpc.net

 

문제 4344) 평균은 넘겠지 문제

 

문제)
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

입력)
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

출력)
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

 

NO 예제 입력 1 예제 출력 1
1 5  
5 50 50 70 80 100 40.000%
7 100 95 90 80 70 60 50 57.143%
3 70 90 80 33.333%
3 70 90 81 66.667%
9 100 99 98 97 96 95 94 93 91 55.556%

 

답 코드)

package JAVA1231;

import java.util.Scanner;

public class Main_평균은넘겠지 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int c = sc.nextInt();
		int n;
		int sum = 0;
		float avg = 0;
		int num = 0;
				
		for(int i=0; i < c; i++) {
			n = sc.nextInt();
			int score[] = new int[n];
			
			for(int j=0; j < n; j++) {
				score[j] = sc.nextInt();
				sum += score[j];
				
				if(j == n-1) {
					avg = (float)sum / n;
					
					for(int k=0; k < n; k++) {
						if(score[k] > avg) {
							num++;
						}
					}					
				}
			}
			double result = (double)num/n * 100;			
			System.out.println(String.format("%.3f", result) + "%");
			
			sum = 0;
			avg = 0;
			num = 0;
		}
	}
}
처음에 c 값을 변수로 받고 입력할 개수를 지정합니다.
입력 받을 점수의 개수를 변수로 받고 입력한 점수 값을 배열에 넣어줍니다.

j 가 맨 마지막 횟수 진행시 avg 값을 구하고 점수가 평균보다 크면 num는 1씩 증가하도록 만듭니다.
j, k 관련된 for문을 모두 수행하고 나면 점수 입력 개수 중 평균보다 큰 점수의 비중을 구합니다.

String.format으로 실수의 소숫점까지 구할 수 있습니다.

 

 

다른 코드의 예시를 보면

 

int C = sc.nextInt();
while(C --> 0) {
	int n = sc.nextInt();
	int a[] = new int[n];
	int sum = 0;
	for(int i=0; i<n; ++i) {
		a[i] = in.nextInt();
		sum += a[i];
	}
	double avg = (double)sum / n;
	int cnt = 0;
	for(int i=0; i<n; ++i) {
		if(a[i] > avg)
			cnt++;
	}
	System.out.printf("%.3f%%\n", (double)cnt / n * 100);
}
while문 C의 값은 1씩 줄면서 0보다 클때까지 반복합니다.

for문은 다중으로 사용하지 않아도 됩니다.

저와 달리 변수를 while이나 for문 내부에 넣어주면 마지막에 초기화 값들을 다시 넣지 않아줘도 됩니다.

 

문제를 풀려고 하다보니 여러개의 조건문, 반복문을 사용했습니다.

코드를 최대한 줄이면서 할 수 있도록 고민해봐야겠어요!!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

 

728x90
반응형