▶ 문제
https://www.acmicpc.net/problem/4344
4344번: 평균은 넘겠지
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
www.acmicpc.net
▶ 설명
학생들의 점수들을 합산하여 평균을 낸 뒤 그 평균을 넘은 학생의 비율을 계산해내면 되는 문제이다.
문제가 복잡하지는 않지만 케이스마다 반복해 주어야 하고, 점수를 입력받을 때 공백을 기준으로 반복문을 활용해서 점수를 입력받아야 하므로 반복문을 위한 분기를 잘 해주어야 했다.
그리고, 평균내는 데에서 그친다면 배열로 점수를 받을 필요가 없지만, 평균보다 높은 점수인 학생 수를 알아내야 하기에 배열을 사용하도록 하였다.
백분율로 평균점수 이상의 학생수 비율을 나타내기 위해서는
(100 / 전체 학생 수) * 평균점수를 넘는 학생 수 라는 수식을 만들었다.
▶ 문제 풀이
🌱 풀이.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int C = Integer.parseInt(br.readLine());
int arr[]; //각 케이스마다 점수를 담을 공간
while (C-- > 0) {
st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
arr = new int[N];
int sum = 0;
//점수를 배열로 담기
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
sum += arr[i];
}
int avg = sum / N;
double cnt = 0;
//평균보다 높은 점수 카운트하기
for (int i = 0; i < N; i++) {
if (avg < arr[i]) {
cnt++;
}
}
//연산한 값을 double 형으로 반환하기 위해 명시적 형변환 하기.
double overAvgRatio = (double) 100 / N * cnt;
// %.3f : 실수형인 수를 소수점 3자리까지 반올림 하여 표현하기.
sb.append(String.format("%.3f", overAvgRatio)).append("%\n");
}
System.out.println(sb);
}
}
비율로 계산 된 값이 실수형이여야 하기 때문에 피연산자도 모두 실수형이여야 한다. cnt 변수는 이미 double 로 선언해 주었기 때문에 상관 없지만 N의 경우는 int 형이기 때문에 N앞에 double 형으로 명시적 형변환을 하였다.
3째 자리까지 반올림하여 출력하기 위해서는 String.format 메소드 이용하여 %.3f 를 입력해주었다.
만약 %와 들여쓰기를 숫자와 함께 쓰고자 한다면 다음과 같이 ' %'앞에 '%'를 하나 더 입력해 주면 된다.
sb.append(String.format("%.3f%%\n", overAvgRatio));
▶ Log
String.format() 메소드의 사용법 참고하기
'백준 알고리즘 > 1차원 배열' 카테고리의 다른 글
[JAVA 자바] 백준 8958번 : OX퀴즈 (0) | 2022.05.28 |
---|---|
[JAVA 자바] 백준 1546번 : 평균 (0) | 2022.05.27 |
[JAVA 자바] 백준 3052번 : 나머지 (0) | 2022.05.26 |
[JAVA 자바] 백준 2577번 : 숫자의 개수 (0) | 2022.05.25 |
백준 2562번 :: 최댓값 (0) | 2022.05.25 |