STUDY/백준알고리즘
[4344:JAVA] 1차원 배열 > 평균은 넘겠지
bameh
2022. 2. 9. 14:51
[백준알고리즘: 1차원 배열 단계 > 7. 평균은 넘겠지] - JAVA
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
[풀이방법]
먼저 처리할 순서를 정의한 후 순서에 따라 필요한 값을 구했다.
1) 테스트 케이스의 개수 입력받기
int testCase;
2) for문을 이용하여 테스트 케이스별 학생의 수와 학생의 수만큼 점수 입력받기
for (int j=0; j<cnt; j++){
point[j] = sc.nextInt();
sum += point[j];
}
3) 입력받은 값을 이용하여 케이스별 평균 계산하기
double avg = sum/cnt;
4) 평균 점수를 초과하는 학생의 수 구하기
for (int j=0; j<point.length; j++){
if (point[j] > avg) {
castCnt++;
}
}
5) 3)과 4)를 이용하여 평균을 넘는 학생의 비율 구하기
temp[i] = ((castCnt/point.length) * 100)
# 전체 코드
public class ch5_7 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int testCase = sc.nextInt();
double[] temp = new double[testCase];
double[] avg = new double[testCase];
// result 개수만큼 학생을 받는다.
for (int i=0; i<testCase; i++){
// 학생 수 입력.
int cnt = sc.nextInt();
int sum = 0;
int[] point = new int[cnt];
// 학생 수 만큼 점수 입력
for (int j=0; j<cnt; j++){
point[j] = sc.nextInt();
sum += point[j];
}
// 케이스별 평균
avg[i] = (float)sum/cnt;
double castCnt =0;
for (int j=0; j<point.length; j++){
if (point[j] > avg[i]) {
castCnt++;
}
}
temp[i] = ((castCnt/point.length) * 100);
}
for (int i=0; i<testCase; i++){
System.out.println(String.format("%.3f", temp[i]) + "%");
}
}
}
위의 코드는 순서만 정의해서 작성을 진행했을 뿐, 구체적인 코드 작성은 정리하지 않고 되는대로 작성다.
따라서 한눈에도 불필요한 내용이 매우 많은 것을 확인할 수 있었다.
불필요한 변수와 for문을 삭제하고, 한 번에 필요한 값을 출력시킬 수 있도록 수정했다.
수식에 필요한 변수는 double로 선언했으며, 값을 간단하게 출력할 수 있도록 printf를 이용했다.
public class ch5_7 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int testCase = sc.nextInt();
// result 개수만큼 학생을 받는다.
for (int i=0; i<testCase; i++){
// 학생 수 입력.
int cnt = sc.nextInt();
double sum = 0;
int[] point = new int[cnt];
// 학생 수 만큼 점수 입력
for (int j=0; j<cnt; j++){
point[j] = sc.nextInt();
sum += point[j];
}
// 케이스별 평균
double avg = sum/cnt;
double castCnt = 0;
for (int j=0; j<point.length; j++){
if (point[j] > avg) {
castCnt++;
}
}
System.out.printf("%.3f%%\n", (castCnt/cnt)*100);
}
}
}
끝.