[BOJ] 4344 평균은 넘겠지 (JAVA)

joyful·2021년 4월 9일
0

Algorithm

목록 보기
37/65

✅ 문제

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

✅ 입력

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

✅ 출력

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

✅ 예제 1

▼ 입력

5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91

▼ 출력

40.000%
57.143%
33.333%
66.667%
55.556%

풀이

  • 이중 for문을 사용한다.

    • 바깥쪽 루프 (제어 변수 i)
      • 돌 때 마다BufferedReader.readLine()으로 데이터를 입력 받는다.
      • StringTokenizer.nextToken()으로 학생 수(n)를 추출하여 점수를 저장할 배열(students)을 선언한다.
      • 점수 합계(sum)평균 및 학생수 비율(avg)을 저장할 변수를 선언하고 초기화 한다.
    • 안쪽 루프 (제어 변수 j)
      • StringTokenizer.nextToken()으로 점수를 추출하여 배열 studendts에 저장하며 점수 합계(sum)을 구하고, 루프가 종료되면 점수 합계와 학생 수를 이용하여 점수 평균(avg)을 구한다.
      • 조건문(if)을 이용하여 점수가 평균이 넘는 학생 수(cnt)를 구한 뒤, 루프가 종료되면 평균이 넘는 학생 수와 입력받은 학생 수를 이용하여 학생 비율(avg)을 구한다.
    • 이중 루프를 종료 하기 전 BufferedWriter.write()와 ①String.format() 혹은 ②Math.round()를 이용하여 학생 비율(avg)을 출력한다.
  • 참고 - 소수점 n번째 자리까지 반올림하는 방법


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int c = Integer.parseInt(br.readLine());	// 테스트 케이스 개수 입력
		
		for(int i=0; i<c; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine()); // 테스트 케이스 입력
			int n = Integer.parseInt(st.nextToken());	// 학생 수 추출
			
			int[] students = new int[n];	// 학생 점수 저장할 배열
			int sum = 0;	// 합계 초기화
			double avg = 0; // 평균 및 학생수 비율로 사용할 변수 초기화
			
			for(int j=0; j<n; j++) {
				students[j] = Integer.parseInt(st.nextToken());	// 점수 추출하여 학생 배열에 저장
				sum += students[j];	// 점수 합계 구하기
			}
			avg = (double)sum/n;	// 점수 평균 구하기
			
			int cnt=0;	// 평균 넘는 학생수
			for(int j=0; j<n; j++) {
				if((double)students[j] > avg)	// 점수가 평균을 넘는다면
					cnt++;
			}
			
			avg = (double)cnt/n*100;	// 학생 수 비율 구하기
			
			bw.write(String.format("%.3f%%", avg));
			bw.newLine();
		}
		
		bw.flush();
		bw.close();
	}
}
profile
기쁘게 코딩하고 싶은 백엔드 개발자

0개의 댓글