관건은 반올림후, 소수점 셋째자리까지 출력하는 부분이겠다.
1. 테스트 케이스의 갯수를 가져온다.
int C = Integer.parseInt(br.readLine());
2. 한 줄을 불러와서
총점을 구해서 평균을 구할 준비를 한다.
학생 비율을 소수점 셋째자리까지 구해야하기 때문에 변수중 하나를 double로 설정하면 된다.
for(int i = 0; i<C; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
double sum = 0; //총점을 구하기
int arr[] = new int[N];
double over = 0; //평균을 넘는 학생수
for(int j = 0; j < N; j++){
arr[j] = Integer.parseInt(st.nextToken());
sum += arr[j];
}
3. 평균을 넘는 학생 비율을 구한다.
for(int k = 0; k < N; k++){
if (arr[k] > (sum/N)){
over++;
}
}
System.out.printf("%.3f%%\n", (over/N)*100);
기본 출력문은 println()은 변수의 값을 그대로 출력하므로, 값을 변환하지 않고는 다른 형식으로 출력할 수 없다.
반면에 printf()는 지시자를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력할 수 있다.
printf()
System.out.printf("출력 서식",출력할 내용);
-
출력 후 줄바꿈을 하지 않는다. 줄바꿈을 하려면 지시자 '%n'을 넣어줘야 한다.
-
출력하려는 값의 수만큼 지시자도 사용해야 한다.
-
출력될 값과 지시자의 순서는 일치해야 한다.
-
지시자를 제외한 문자는 입력한 그대로 출력된다.
즉, .printf("%.3f%%\n", 는
1. %.3f 와
2. %%
3. \n로 나누어 보면 되는데,
1 => 소숫점 3째자리'까지' 반올림해서 보여주고,
2=> '%'라는 문자를
3=> "각 줄이 끝나면 줄바꿈을 해달라"는 것이다.
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int C = Integer.parseInt(br.readLine());
for(int i = 0; i<C; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
double sum = 0;
int arr[] = new int[N];
double over = 0;
for(int j = 0; j < N; j++){
arr[j] = Integer.parseInt(st.nextToken());
sum += arr[j];
}
for(int k = 0; k < N; k++){
if (arr[k] > (sum/N)){
over++;
}
}
System.out.printf("%.3f%%\n", (over/N)*100);
}
}
}
'Programming > 알고리즘' 카테고리의 다른 글
[백준] 1065 -JAVA[자바] (0) | 2022.11.29 |
---|---|
[백준] 4673 - JAVA[자바] (0) | 2022.11.29 |
[백준] 8958 - OX퀴즈 - JAVA[자바] (0) | 2022.11.27 |
[백준] 1546 - 평균 - JAVA[자바] (0) | 2022.11.27 |
[백준] 3052 - 나머지 - JAVA[자바] (0) | 2022.11.27 |