문제
세준이는 기말고사를 망쳤다. 그래서 점수를 조작해 집에 가져가기로 결심했따. 일단 세준이는 자기 점수 중 최댓값을 골랐다. 그런 다음 최댓값을 M이라 할 때 모든 점수를 점수/M*100으로 고쳤다. 예를 들어 세준이의 최고점이 70점, 수학 점수가 50점이라면 수학 점수는 50/70*100이므로 71.43점이다. 세준이의 성적을 이 방법으로 계산했을 때 새로운 평균을 구하는 프로그램을 작성하시오.
입력
1번째 줄에 시험을 본 과목의 개수 N이 주어진다. 해당 값은 1,000보다 작거나 같다. 2번째 줄에 세준이의 현재 성적이 주어진다. 해당 값은 100보다 작거나 같은, 음이 아닌 정수이고, 적어도 1개의 값은 0보다 크다.
출력
첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int subject = scanner.nextInt();
int arr[] = new int[subject];
for(int i=0; i<subject; i++){
arr[i] = scanner.nextInt();
}
long sum = 0;
long max = 0;
for(int i=0; i<subject; i++){
if(arr[i] > max)
max = arr[i];
sum += arr[i];
}
System.out.println(sum * 100.0 / max / subject);
}
}
▶ int subject = scanner.nextInt() : 사용자로부터 int 값을 입력 받아 subject 변수에 저장함
→ 시험 본 과목의 개수
▶ int arr[] = new int[subject] : 시험 본 과목의 개수만큼의 크기를 가진 배열 arr를 선언함
▶ for(int i=0; i<subject; i++){arr[i] = scanner.nextInt();} : 시험 본 과목의 개수만큼 for문을 반복하며 시험 점수를 입력 받음
▶ for(int i=0; i<subject; i++){if(arr[i] > max) max = arr[i]; sum += arr[i];} : 시험 본 과목의 개수만큼 for문을 반복하며 max에 저장된 값보다 배열에 저장된 값이 더 클 경우, 배열에 저장된 값을 max로 변경하고 배열에 저장되어 있는 모든 점수들의 합을 sum에 저장함
▶ System.out.println(sum * 100.0 / max / subject) : '전체 점수의 합계 * 100.0 / 최대값 / 과목 수'를 계산해서 출력함
→ 평균을 계산하는 방법 : {(과목 1 점수 / 최대값 * 100.0) + (과목 2 점수 / 최대값 * 100.0) + ... } / 과목 수
'Algorithm > BAEKJOON' 카테고리의 다른 글
[Java] 11660 구간 합 구하기 5 (0) | 2023.04.07 |
---|---|
[Java] 11659 구간 합 구하기 4 (0) | 2023.04.05 |
[Java] 11720 숫자의 합 구하기 (0) | 2023.04.02 |
[ C / C++ ] 백준 20301 반전 요세푸스 (0) | 2022.05.21 |
[ C / C++ ] 백준 17478 재귀함수가 뭔가요? (0) | 2022.05.20 |