[백준/BOJ] Bronze1 - 1546번 평균 (JAVA)
11720 평균
문제
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
출력
첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.
풀이
평균을 새롭게 정의해서 반복문을 활용한 연산문제
for 문을 사용해서 입력받은 값중에 max 와 sum 값을 구하는게 포인트
max 값은 문제에 나온 변수니까 당연히 구해야한다고 생각이들겠지만
sum은 왜 구해야하는거지? 할 수 있다.
예를 들어 입력 받을 수의 개수 N을 3이라 하고 최댓값을 M 이라 하면
= (A/M * 100.0 + B/M * 100 + c/M * 100)/N
= ((A+B+C) * 100.0/M) / N
= (A+B+C) * 100.0 / M / N
이렇게 식을 정리해보면 왜 sum 값이 필요한지 알 수 있다.
+ ) 그리고 저번에 계속 컴파일 에러가 나던 이유가 도저히 이해가 안되서 찾아봤는데
package array; 이렇게 패키지 이름을 안 지우고 넣어서 그런거였다는 것을 이 블로그를 통해 알았다..
https://technote-mezza.tistory.com/56
[백준 런타임에러]런타임 에러가 난다면
문제를 제출했을 때 런타임 에러가 나면 정확히 무슨 이유인지 명시해주지 않기 때문에 알아서 고쳐야 한다. -> 이제는 런타임 에러의 종류를 명시해준다! 여러 가지 이유 1. 배열 인덱스 범위를
technote-mezza.tistory.com
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long sum = 0;
long max = 0;
for(int i=0; i<n; i++) {
int tmp = sc.nextInt();
if(tmp > max) {
max = tmp;
}
sum += tmp;
}
System.out.println(sum * 100.0 / max / n);
// ex) N = 3 이고 , 최댓값을 M 이라 하면
// = (A/M * 100.0 + B/M * 100 + c/M * 100)/N
// = ((A+B+C) * 100.0/M) / N
// = (A+B+C) * 100.0 / M / N
}
}