티스토리 뷰

728x90
반응형

백준 온라인 저지(BOJ) 4344번 평균은 넘겠지

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

 

4344번: 평균은 넘겠지

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. 정답과 출력값의 절대/상대 오차는 10-3이하이면 정답이다.

www.acmicpc.net

* 사용언어 : java, 자바

 

1. 문제

C번의 테스트 케이스

N명의 점수를 입력받고, 평균을 넘는 학생의 비율을 소수점 넷째자리 반올림하여 출력

 

2. 풀이

1) 여러 개의 테스트 케이스를 처리하기 위해

바깥 쪽에서 C를 입력 받아서 for문을 돌립니다.

for문에서 반복을 시작할 때, 초기화가 필요한 변수들을 초기화를 해줍니다.

점수를 담는 배열 scores는 n을 입력받고 0부터 n-1까지의 값만 입력받고 사용하기 때문에

굳이 초기화를 할 필요가 없습니다.

 

2) 이제 for문 안쪽을 생각해보겠습니다.

입력 받으면서 누가 평균보다 높은 지 한 번에 처리한다면 좋겠는데,

모든 점수를 입력받지 않으면 평균을 구할 수가 없죠.

 

그래서 어쩔 수 없이 입력을 모두 받고 (그러면서 total에 더해줍니다)

평균을 구한 후에, 다시 for문을 돌면서 평균과 각 점수를 비교해줍니다.

평균보다 크면 count를 1 올려주고, 아니면 넘어갑니다.

 

출력에서는 printf 메서드를 써서 간단하게 반올림을 처리할 수 있습니다.

형식을 맞추기 위해(% 붙이고 한 줄 개행) println 메서드도 사용했습니다.

 

3. 코드

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, total, count;
		double avg;
		int scores[] = new int[1000];
		for (int i = 0; i < c; ++i) {
			n = sc.nextInt();
			total = 0;
			count = 0;
			for (int j = 0; j < n; ++j) {
				scores[j] = sc.nextInt();
				total += scores[j];
			}
			avg = (double)total / n;
			for (int j = 0; j < n; ++j) {
				if (scores[j] > avg) count++;
			}
			System.out.printf("%.3f", 100.0 * count / n);
			System.out.println("%");
		}
		sc.close();
	}
}

 

728x90
반응형
댓글