Problem Solving/BOJ

[백준 1546번/1차원 배열] 평균 - Java

Ethan(기린) 2021. 3. 15. 15:45

www.acmicpc.net/problem/1546

 

1546번: 평균

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보

www.acmicpc.net

내 코드

import java.util.Arrays;
import java.util.Scanner;

class Main {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		double[] arr = new double[sc.nextInt()];
		
		for(int i = 0; i<arr.length; i++) {
			arr[i] = sc.nextDouble();
		}
		sc.close();
		
		double sum = 0;
		Arrays.sort(arr);
		
		for(int i = 0; i<arr.length; i++ ) {
			sum += ( (arr[i] / arr[arr.length-1]) * 100);
		}
		System.out.println(sum / arr.length);
	}
}

우선 임의의 과목 개수 N을 받아야 하기 때문에 배열의 길이를 입력 받은 값만큼 생성한 후 배열의 길이 만큼 for문을 반복해서 배열의 각 원소에 값들을 입력받도록 한다.

Arrays.sort()를 사용하면 오름차순으로 정렬하여 최댓값은 배열의 마지막 원소에 있게 된다. 두 번째 for문에서는 각 과목에 대해 새로운 평균 계산식 (점수 / M[최댓값] * 100)을 sum에 저장하고 그것을 배열의 길이(과목의 수)만큼 나누어 평균의 결과를 출력했다.


생각해야할 점

  1.  정답에 대한 절대, 상대오차는 10^(-2)까지 허용한다는 점
  2.  과목에 대한 입력 값은 공백을 기준으로 주어진다.
  3.  출력 값은 오차범위가 있으므로 연산에서 자료형을 double 타입으로 형변환 해주어야 한다.