티스토리 뷰

서론
하도 통과가 안 되가지고 뭐가 문제지 엄청 고민했는데, 출력 방법을 몰랐어서 계속 틀린 것이었다.
예전에 정보처리기사 실기 준비할 때, C알고리즘 문제에서 printf로 문자열 형식을 정하여 출력하는 방법을 배웠었다. JAVA에서도 그 방법을 사용할 수 있다. 그것을 알아야 한다.
| 출처 | 나를위한노트
| 출처 | hello jiniworld
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
시행착오(Trial&Error)

풀이(Solution)
bw.write()를 호출할 때 String.format메서드를 사용하면 System.out.printf("/*문자열 형식*/", 값);과 같은 방식으로 출력할 수 있다.즉, 이 문제는 두 가지 방법으로 해결할 수 있다.
코드
1. System.out.printf()사용
import java.io.*;
import java.util.StringTokenizer;
class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tNum = Integer.parseInt(br.readLine());
for(int i = 0; i < tNum; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int sNum = Integer.parseInt(st.nextToken());
int[] arr = new int[sNum]; // 학생들의 점수를 저장하는 배열
int sum = 0; // 학생들의 점수 총합
float average = 0; // 평균
int cnt = 0; // 평균을 넘는 점수를 받은 학생 수
for(int j = 0; j < sNum; j++) {
arr[j] = Integer.parseInt(st.nextToken());
sum += arr[j];
}
average = sum / (float)sNum;
for(int k = 0; k < sNum; k++) {
if(average < arr[k]) {
cnt++;
}
}
float result = 0;
result = cnt / (float)sNum * 100 * 1000;
result = Math.round(result);
System.out.printf("%.3f%%\n", result / 1000);
}
br.close();
} catch(IOException e) {}
}
}
2. bw.write(String.fomat()) 사용
import java.io.*;
import java.util.StringTokenizer;
class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int tNum = Integer.parseInt(br.readLine());
for(int i = 0; i < tNum; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int sNum = Integer.parseInt(st.nextToken());
int[] arr = new int[sNum]; // 학생들의 점수를 저장하는 배열
int sum = 0; // 학생들의 점수 총합
float average = 0; // 평균
int cnt = 0; // 평균을 넘는 점수를 받은 학생 수
for(int j = 0; j < sNum; j++) {
arr[j] = Integer.parseInt(st.nextToken());
sum += arr[j];
}
average = sum / (float)sNum;
for(int k = 0; k < sNum; k++) {
if(average < arr[k]) {
cnt++;
}
}
float result = 0;
result = cnt / (float)sNum * 100;
bw.write(String.format("%.3f", result) + "%\n"); // Math.random() 안 써도 됨
}
br.close();
bw.flush();
bw.close();
} catch(IOException e) {}
}
}'알고리즘 > 문제풀이 - 백준' 카테고리의 다른 글
| [백준 1065번] 한수(JAVA) (0) | 2022.11.08 |
|---|---|
| [백준 4673번] 셀프 넘버(JAVA) (0) | 2022.11.07 |
| [백준 8958번] OX퀴즈(JAVA) (0) | 2022.11.04 |
| [백준 1546번] 평균(JAVA) (0) | 2022.11.03 |
| [백준 1110번] 더하기 사이클(JAVA) (0) | 2022.11.02 |
댓글
공지사항
