본문 바로가기

백준 알고리즘

백준 [1546] 평균 - 자바 풀이

반응형

https://www.acmicpc.net/problem/1546

 

1546번: 평균

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

www.acmicpc.net


 

 

처음에는 아래처럼 생각했는데 작동되지 않았다.

소수점 둘째자리까지 나타내는 걸 보고 int형이 아닌 double형을 사용해야 한다는 것을 알아채야한다.

 

package Problems;

import java.util.Scanner;

public class a1546 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int[] arr = new int[N];
		int max = 0;
		int sum = 0;
		
		//arr안에 과목 점수 넣기
		for(int i=0; i<N; i++) {
			arr[i] = sc.nextInt();
		}
		//for if문으로 max구하기
		for(int i=1; i<N+1; i++) {
			if(arr[i-1]>=arr[i]) {
				max = arr[i-1];
			} else {
				max = arr[i];
			}
		}
		
		for(int i=0; i<N; i++) {
			//arr[i] = (arr[i]/max)*100;
			sum = (arr[i]/max)*100;
		}
		System.out.println(sum/N);
	}
}

 

정답은 아래 코드와 같다.

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

public 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);
	}
}

double형인 arr 배열에 sc.nextInt()로 원소를 입력받는다.

원소의 개수는 arr.length까지의 범위를 두어 주어진 갯수를 받는다.

sum의 자료형도 double로 해 소수 둘째자리까지 표현하게 만든다.

 

Arrays.sort를 사용해 arr을 오름차순으로 정렬하고,

sum에 덧대어 더하는 방식으로 ((arr[i]/arr[arr.length-1]) * 100)을 사용한다.

 

주의해야 하는 부분은 오차범위이고, 연산 할 때 자료형 1개 이상은 반드시 double 형으로 표현해야 한다.

그러면 자동 형변환으로 자료형이 큰 쪽으로 변환된다. int -> double 

 

반응형