이 포스팅은 자바 8버전으로 포스팅 됐습니다.
[ 백준 - 1546 ]
문제
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
출력
첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[]args) throws IOException {
try {
BufferedReader s_rd = new BufferedReader(new InputStreamReader (System.in));
String text[] = s_rd.readLine().split(" ");
int j = Integer.parseInt(text[0]);
double max=0;
double sum=0;
String num[] = s_rd.readLine().split(" ");
double re_num[] = new double[j];
// max 값 구하기
for(int i=0; i<j; i++) {
re_num[i] = Integer.parseInt(num[i]);
if(Integer.parseInt(num[i])>max) {
max = Integer.parseInt(num[i]);
}
}
// 전체 값 수정하기
for(int i=0; i<j; i++) {
re_num[i]= re_num[i]/max*100;
sum += re_num[i];
}
// 평균 값 구하기
System.out.println(sum/j);
}
catch(IOException e) {
}
}
}
|
풀이
기존 평균 값을 구하는 것과 다르게 입력받은 값을 점수/최댓값 *100을 통하여 모두 새로운 값으로 초기화해주는 것이다.
좋은 풀이 방법이 바로 생각이 안 나서 본인은 max(최댓값) 값을 구하면서 겸사겸사 갱신될 배열을 정리했다. 또한 다음 반복문을 통해서 점수/최댓값*100을 대입하고 그 값을 sum(합)으로 넣어서 문제를 해결했다.
만약 이번 문제가 헷갈렸다면 [점수/최댓값*100] 이 부분의 지문을 잘못 읽고 기본 평균을 구하는 문제로 착각했을 수 있다.
짧은 포스팅 읽어주셔서 감사드립니다.
오타 또는 문제에 대해 이상한 점이 있다면 댓글 부탁드리겠습니다!
다음 포스팅 때 뵙겠습니다!
'백준 - Java' 카테고리의 다른 글
[ 백준 - 1978] [Java] 소수 찾기 (0) | 2022.05.06 |
---|---|
[ 백준 - 1929] [Java] 소수 구하기 (0) | 2022.05.05 |
[백준 - 2753] [Java] 윤년 (0) | 2022.05.01 |
[백준 - 9498] [Java] 시험 성적 (0) | 2022.04.29 |
[백준 - 1001] [Java] A-B (0) | 2022.04.24 |