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

- 예제 입력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
- 예제 출력1
40.000%
57.143%
33.333%
66.667%
55.556%
- 문제 접근
- 각 케이스마다의 평균을 구해야 함
- 학생들의 각 점수가 평균을 초과하는 학생만 카운트
- 평균을 초과한 학생 / 총 학생 수 ⇒ 소수점 셋째자리 표현
- 문제 해결
- 각 케이스마다 배열을 생성하여 ArrayList에 저장
- 각 케이스의 평균을 배열로 저장
- 평균과 각 점수를 비교하여 초과하는 학생 수만 카운트
- 평균 초과 학생 / 배열 길이 * 100 ⇒ 소수점 셋째자리 표현
- 슈도 코드
T (테스트 케이스 개수 저장)
avgArr[T] (평균 저장 배열)
avgPercent[T] (평균이 넘는 학생 비율 저장 배열)
List<int[]> 선언
for(T회 반복){
n (학생 수 저장)
int[n] A 배열 선언
sum (합계 저장)
for(n회 반복){
A[] 저장
sum 누적
}
list.add(A)
avgArr[i]에 sum/n 평균 저장
}
calcAvgPercent(){
for(i=0 ~ T회 반복){
A = list.get(i번째)
count(평균을 넘는 학생 수 체크)
for(j=0 ~ A배열 길이){
if(A[j] > avgArr[i]){
count 1증가
}
}
avgPercent[i] = 비율 계산 후 소수점3째자리 반올림하여 저장
}
}
- 코딩하기
package Problem_Number;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/*
- 각 케이스마다 배열을 생성하여 ArrayList에 저장
- 각 케이스의 평균을 배열로 저장
- 평균과 각 점수를 비교하여 초과하는 학생 수만 카운트
- 평균 초과 학생 / 배열 길이 * 100 ⇒ 소수점 셋째자리 표현
* */
public class No4344 {
static int T; // 테스트 케이스 개수
static int[] avgArr; // 테스트 케이스별 평균 저장
static double[] avgPercent; // 테스트 케이스별 평균 초과 학생 백분율 계산
static List<int[]> list = new ArrayList<>(); // 테스트 케이스 저장 리스트
public static void main(String[] args) {
inputInit(); // 입력 받는 메서드
calcAvgPercent(); // 평균 넘는 학생 비율 계산 메서드
for(int i = 0; i < T; i++){
System.out.println(String.format("%.3f",avgPercent[i]) + "%");
}
}
private static void inputInit(){
Scanner scan = new Scanner(System.in);
T = scan.nextInt();
avgArr = new int[T];
avgPercent = new double[T];
for(int i = 0; i < T; i++){
int N = scan.nextInt();
int[] A = new int[N];
int sum = 0;
for(int j = 0; j < N; j++){
A[j] = scan.nextInt(); // 학생 점수 배열에 저장
sum += A[j]; // 합계 저장
}
list.add(A); // List에 배열 추가
avgArr[i] = sum / A.length; // 각 테스트케이스별 평균 저장
}
scan.close();
}
private static void calcAvgPercent(){
for(int i = 0; i < T; i++){
int[] A = list.get(i); // 테스트 케이스별 배열 추출
int count = 0; // 평균 넘는 학생 카운트
int avg = avgArr[i]; // 평균 점수 추출
for (int j : A) {
if (j > avg) { // 학생 점수가 평균 초과일 경우
count++;
}
}
avgPercent[i] = count * 1.0 / A.length * 100; // 백분율로 저장
}
}
}728x90
'Coding Test > Problem Number' 카테고리의 다른 글
| [Java] 2차원 배열의 합 [2167번] (0) | 2024.07.18 |
|---|---|
| [Java] 수들의 합5 [2018번] (0) | 2024.07.18 |
| [Java] 수들의 합2 [2003번] (0) | 2024.07.18 |
| [Java] 참외밭 [2477번] (0) | 2024.07.17 |
| [Java] 2007년 [1924번] (0) | 2024.07.17 |