(백준)4344번 평균은 넘겠지 풀기

DevSeoRex·2022년 6월 8일
0

백준

목록 보기
10/12

문제의 요지는 테스트 케이스의 개수를 입력받고, 배열의 길이를 입력받은 뒤, 배열의 길이 만큼 점수를 입력 받아서, 배열의 평균보다 점수가 높은 학생의 비율을 계산하는 것이 문제이다.

Step1

Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		int[] arr;
		double[] arr2 = new double[a];
		double[] arr3 = new double[a];
		double[] arr4 = new double[a];
		int count = 0;

테스트 케이스의 개수를 입력받을 a, 점수를 입력 받을 배열 arr, 점수의 합계를 입력받을 arr2, 점수의 평균을 입력받을 arr3, 평균보다 점수가 높은 학생의 비율을 입력받을 arr4, 평균보다 점수가 높은 학생의 수를 셀 변수 count를 선언해 주었다.

Step2.

for (int i = 0; i < a; i++) {
	int b = sc.nextInt();
	arr = new int[b];
	for (int j = 0; j < b; j++) {
		int c = sc.nextInt();
		arr[j] = c;
		arr2[i] += (double) arr[j];
		arr3[i] = (double) (arr2[i] / b);			
			}

배열의 개수(입력 받을 점수의 수)를 정할 b의 값을 입력받고, 점수를 c에 저장한다.
arr[] 에 점수를 전부 저장해주고, arr2[]에 점수의 합계를 저장한뒤, arr3[]에 평균을 저장한다.

Step3.

for(int k=0; k<arr.length; k++) {
	if(arr[k] > arr3[i]) {
		count++;
	}
	double per = (double)100/b*count;
		arr4[i] = per;
	}
	count = 0;
	}

arr[]에 있는 점수를 전부 꺼내서, 평균 보다 큰지 검사하고, 몇개의 점수가 평균보다 큰지 count를 증가 시켜서 세준다.
arr4에 최종적인 비율을 저장해주고, count를 0으로 초기화 해준다.

Step4.

for(int i=0; i<arr4.length; i++) {
	System.out.printf("%.3f%%\n",arr4[i]);
		}

소수 3번째 자리까지 반올림하여 출력하라고 하였으므로, printf()를 이용하여 형식 출력을 해준다.
처음에 DecimalFormat 클래스의 format() 메서드를 사용했지만 오답처리가 되서 printf() 로 출력해 주었다.
.3f 는 실수를 소수 3번째 자리까지 반올림하여 출력하라는 뜻이고, %를 하나만 붙이면 %가 출력되지 않으므로, %를 두개 붙여서 출력되게 하였다.

전체 코드

import java.util.Scanner;
public class Main9 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		int[] arr;
		double[] arr2 = new double[a];
		double[] arr3 = new double[a];
		double[] arr4 = new double[a];
		int count = 0;
		for (int i = 0; i < a; i++) {
			int b = sc.nextInt();
			arr = new int[b];
			for (int j = 0; j < b; j++) {
				int c = sc.nextInt();
				arr[j] = c;
				arr2[i] += (double) arr[j];
				arr3[i] = (double) (arr2[i] / b);			
			}
			for(int k=0; k<arr.length; k++) {
				if(arr[k] > arr3[i]) {
					count++;
				}
				double per = (double)100/b*count;
				arr4[i] = per;
			}
			count = 0;
		}
		for(int i=0; i<arr4.length; i++) {
			System.out.printf("%.3f%%\n",arr4[i]);
		}
	}
}

백준 문제번호만 검색하면 정말 깔끔하게 문제 풀이를 해주시는 분들이 많다. 그럼에도 내가 쓴 코드를 자꾸 올리는 이유는, 내가 문제를 풀 당시에 무슨 생각으로 어떻게 접근했는지를 다시 remind 해볼 수 있고, 깔끔하고 효율이 좋게 문제를 푸신 분들의 코드를 보면서 내 접근 방식과 그분들의 접근방식을 비교하면 더 나은 답을 찾아 갈 수 있기 때문이다.

0개의 댓글