생각을 많이 하게 되는 문제이다...
테스트 케이스를 따로 받고 배열의 갯수를 따로 지정한다?
어떤 식으로 풀어야할까?
이번 문제는 Scanner를 이용해본다
먼저 테스트케이스를 입력받는다.
Scanner sc = new Scanner(System.in);
int TestCase = sc.nextInt();
그리고 for문을 돌려서 그 안에 배열을 다시 입력 받는다
for(int i=0; i<TestCase; i++){
int n = sc.nextInt();
int[] arr = new int[n];
double sum = 0;
출력해야하는 수는 double 형식이다.
for(int j=0; j<arr.length; j++){
arr[j] = sc.nextInt(); // 성적입력
sum+=arr[j]; // 입력한 합을 더해준다
}
이제 3개의 변수가 필요하다.
double avg = (sum/n); // 평균
double cnt = 0; // 평균을 넘는 학생
double cntavg = 0; // 평균을 넘는 학생들의 평균을 담을 변수
// 평균을 넘는 학생들의 비율?
for(int k=0; k< arr.length; k++){
if(arr[k]>avg){ // 평균보다 높다면?
cnt++; // cnt에 추가
}
cntavg = (cnt/n)*100; // 평균 이상 학생들의 평균
}
다시 배열을 돌면서 평균 점수보다 높은 학생들을 추출하고
그 변수를 cnt에 추가해서 다시 평균을 구한다.
100을 곱하지 않으면 0.4가 출력된다
마지막은 소수점 셋째 자리까지 출력을 해줘야했는데
String.format() 메소드를 이용했다.
String.format()
가장 간단한 것은 String.format()을 이용하는 방법입니다.
format(format, args)은 인자로 전달된 format에 맞게 문자열을 만들어 리턴해 줍니다.
다음과 같이 format을 "%.6f"로 전달하면 소수점 7번째 자리를 반올림하여 소수점 6번째 자리까지만 표현하라는 의미입니다.
출처 : 코드차차
System.out.println(String.format("%.3f",cntavg)+"%");
이렇게 하면 3번째 자리까지 반올림하여서 아름답게 출력이 된다
package 백준;// @ author ninaaano
import java.util.Scanner;
public class b_4344 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int TestCase = sc.nextInt();
for(int i=0; i<TestCase; i++){
int n = sc.nextInt(); // 학생의 수
int[] arr = new int[n];
double sum = 0;
for(int j=0; j<arr.length; j++){
arr[j] = sc.nextInt(); // 성적입력
sum+=arr[j]; // 입력한 합을 더해준다
}
double avg = (sum/n); // 평균
double cnt = 0; // 평균을 넘는 학생
double cntavg = 0; // 평균을 넘는 학생들의 평균을 담을 변수
// 평균을 넘는 학생들의 비율?
for(int k=0; k< arr.length; k++){
if(arr[k]>avg){ // 평균보다 높다면?
cnt++; // cnt에 추가
}
cntavg = (cnt/n)*100; // 평균 이상 학생들의 평균
}
System.out.println(String.format("%.3f",cntavg)+"%");
}
sc.close();
}
}
문제 이해부터가 어려운걸보니 나는 한국인이 아닌가보다
한국어가 왜이렇게 어렵지? 😥😥
이렇게 백준에서 1차원 배열까지의 문제를 풀어보았다.
아직 익숙해지진 않았지만 배열의 특징과 장,단점을 공부해야할 것 같다
자료구조로 들어가면 연결리스트를 사용해야하니까 익숙해질 필요가 있다