Algorithm

[Java] 백준 문제 1546 평균

isaac.kim 2022. 4. 23. 11:28
728x90
반응형

[Java] 백준 문제 1546 평균

 

백준 알고리즘 문제 푸는 사이트에서 문제를 갖고 왔다.

(링크를 안 거는 이유는 링크의 주소가 달라졌을 때 글이 저품질이 걸릴 수 있다기에 걸지 않았다. 구글에서 백준 검색!)

 

 

다음은 입출력 조건이다.

 

여기까지 문제의 설명이다.

 

입출력 예제를 보고 답을 맞출 수 있도록 코드를 작성한다.

 

 

 

전체 소스 코드

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

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		// 입력
		int n = sc.nextInt();
		double[] sco = new double[n];
		for (int i = 0; i < n ; i++)sco[i] = sc.nextDouble();
		
		double sum = 0;

		// 처음부터 비교하면서 큰 값 찾거나
		// 정렬 후 끝값 -> 최댓값
		Arrays.sort(sco);
		// 새로운 점수 계산법으로 score reset
		for (int j = 0; j < sco.length; j++ )
			sum += sco[j] / sco[n-1];

		System.out.println(  sum / n * 100 );
		sc.close();
	}
}

 

 

코드 풀이

Scanner sc = new Scanner(System.in);

// 입력
int n = sc.nextInt();
double[] sco = new double[n];
for (int i = 0; i < n ; i++)sco[i] = sc.nextDouble();

Java에서 대표적인 입력방법 두 가지 중에 Scanner 클래스를 사용해 입력을 받았다. 더 빠른 속도의 입력이 필요한 경우  BufferedReader 클래스를 사용해서 작성하면 된다.

 

n 정수를 입력받고, n개 크기의 배열 sco를 세팅한다. 소숫점 계산 부분에서 틀린 값이 나오기도 해서 애초에 double 타입 배열을 선언했다. 

 

그리고 n개 만큼 입력을 받아주었다.

 

 

double sum = 0;

// 처음부터 비교하면서 큰 값 찾거나
// 정렬 후 끝값 -> 최댓값
Arrays.sort(sco);
// 새로운 점수 계산법으로 score reset
for (int j = 0; j < sco.length; j++ )
    sum += sco[j] / sco[n-1];

System.out.println(  sum / n * 100 );
sc.close();

합을 구하고 담기 위한 변수 sum, 그리고 최댓값을 찾기 위해 Arrays.sort()로 정렬을 시켰다. 그럼 마지막 값이 최댓값이 되기 때문이다.

 

각 점수를 최댓값으로 나눈 합계를 sum에 더해준다.

 

그리고 평균 구하는 식을 사용한다. sum / n * 100 

 

출력, 그리고 Scanner 객체 소멸로 코드가 마무리 된다.

 

 

728x90
반응형