백준 알고리즘/1차원 배열

[JAVA 자바] 백준 4344번 : 평균은 넘겠지

Sun720 2022. 5. 28. 01:12

▶ 문제

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

 

4344번: 평균은 넘겠지

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

www.acmicpc.net

 설명

학생들의 점수들을 합산하여 평균을 낸 뒤 그 평균을 넘은 학생의 비율을 계산해내면 되는 문제이다.

문제가 복잡하지는 않지만 케이스마다 반복해 주어야 하고, 점수를 입력받을 때 공백을 기준으로 반복문을 활용해서 점수를 입력받아야 하므로 반복문을 위한 분기를 잘 해주어야 했다.

 

그리고, 평균내는 데에서 그친다면 배열로 점수를 받을 필요가 없지만, 평균보다 높은 점수인 학생 수를 알아내야 하기에 배열을 사용하도록 하였다.

 

백분율로 평균점수 이상의 학생수 비율을 나타내기 위해서는 

(100 / 전체 학생 수) * 평균점수를 넘는 학생 수 라는 수식을 만들었다.

 

 

 

문제 풀이

🌱 풀이.  

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

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;

		int C = Integer.parseInt(br.readLine());
		int arr[]; //각 케이스마다 점수를 담을 공간

		while (C-- > 0) {
			st = new StringTokenizer(br.readLine(), " ");
			int N = Integer.parseInt(st.nextToken());
			arr = new int[N];
			int sum = 0;
            
            //점수를 배열로 담기
			for (int i = 0; i < N; i++) {
				arr[i] = Integer.parseInt(st.nextToken());
				sum += arr[i];
			}
			int avg = sum / N;
			double cnt = 0;
            
            //평균보다 높은 점수 카운트하기
			for (int i = 0; i < N; i++) {
				if (avg < arr[i]) {
					cnt++;
				}
			}
			
            //연산한 값을 double 형으로 반환하기 위해 명시적 형변환 하기.
			double overAvgRatio = (double) 100 / N * cnt;

			// %.3f : 실수형인 수를 소수점 3자리까지 반올림 하여 표현하기.
			sb.append(String.format("%.3f", overAvgRatio)).append("%\n");
		}
		System.out.println(sb);

	}

}

 

 

비율로 계산 된 값이 실수형이여야 하기 때문에 피연산자도 모두 실수형이여야 한다. cnt 변수는 이미 double 로 선언해 주었기 때문에 상관 없지만 N의 경우는 int 형이기 때문에 N앞에 double 형으로 명시적 형변환을 하였다.

 

 

3째 자리까지 반올림하여 출력하기 위해서는 String.format 메소드 이용하여 %.3f 를 입력해주었다.

 

만약 %와 들여쓰기를 숫자와 함께 쓰고자 한다면 다음과 같이 ' %'앞에  '%'를 하나 더 입력해 주면 된다.
sb.append(String.format("%.3f%%\n", overAvgRatio));

 

 

Log

String.format() 메소드의 사용법 참고하기

https://blog.jiniworld.me/68#a01

728x90
반응형