[Bronze I] 평균 - 1546
성능 요약
메모리: 18404 KB, 시간: 260 ms
분류
사칙연산, 수학
제출 일자
2024년 5월 30일 14:04:33
문제 설명
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
출력
첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.
코드
package 평균;
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
/**
* 문제 : 첫줄에 학생 수를 입력받고,
* 다음줄에 각 학생들의 점수를 공백을 기준으로 입력받아 리스트에 저장한 후, 해당 점수들을 처리하여 평균을 구하는 것 입니다.
*
*/
Scanner scanner = new Scanner(System.in);
// 학생 수를 입력받습니다.
int n = scanner.nextInt();
scanner.nextLine();
// 학생들의 원점수가 담긴 리스트를 생성합니다.
List<Integer> digitList = Arrays.stream(scanner.nextLine().split(" "))
.map(Integer::parseInt)
.collect(Collectors.toList());
// 원점수 리스트 중 최대값을 찾습니다.
int max = Collections.max(digitList);
// 점수를 세탁하여 새로운 리스트에 저장합니다. : (원래최고점수 / 원래점수[idx]) * 100
List<Double> cleanedNumArr = new ArrayList<>(3);
for(double num : digitList) {
double cleanNum = ( num / max ) * 100;
cleanedNumArr.add(cleanNum);
}
// 세탁된 점수들의 총합을 구합니다.
double total = cleanedNumArr.stream().mapToDouble(num -> num.doubleValue()).sum();
// 평균을 계산합니다.
double answer = total / n;
System.out.println(answer);
}
}
'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글
[백준] 파일 정리 - 20291번 (1) | 2024.05.30 |
---|---|
[백준] 회사에 있는 사람 - 7785번 (0) | 2024.05.30 |
[백준] 단어공부 - 1157번 (0) | 2024.05.30 |
[백준] 상수 - 2908번 (0) | 2024.05.30 |
[백준] 할리갈리 - 21760번 (0) | 2024.05.30 |