본문 바로가기

알고리즘/백준

[1546]평균

수행일자 : 2021.07.31


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

 

1546번: 평균

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

www.acmicpc.net


문제

  • 세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
  • 예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
  • 세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

입력

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

출력

  • 첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.

입출력 예제


BufferedReader 와 Arrays.sort() 를 사용해서 풀어볼 것이다.

  • BufferedReader 를 사용한 상태로 Arrays.sort() 없이 코드를 작성하려고 해 봤으나, 소수점 아래 값이 정확히 일치하지 않아 백준에서는 틀렸다는 결과가 나오기에 Arrays.sort() 로만 코드를 작성했다.

선언할 변수들은 다음과 같다.

  • 입력받을 점수의 개수를 저장할  int형 변수 [ N ]
  • 각 점수들을 저장할 double형 배열 [ arr ]
  • 결과값을 저장할 double형 변수 [ result ]

결과가 소수점이 있는 형태인 Double 형태로 출력되어야 하기에 점수를 저장할 배열과 결과값을 저장할 변수를 double 형으로 선언하였다.

이 때 변수 [ result ] 는 double 형이기에 0.0 으로 초기화해주었으나 0 으로 초기화해도 코드상 문제는 발생하지 않는다.

StringTokenizer 를 선언하여 띄어쓰기 기준으로 각 점수를 입력받게 하고 for 문을 돌려서 arr[] 배열에 각 점수를 저장한다.

Arrays.sort() 를 사용하여 배열 내의 값들을 자동적으로 오름차순으로 정리한다.

한번 더 for 문을 돌려서 결과값에 해당 점수와 배열 맨 마지막인 최대값을 이용한 계산식을 선언한다.

  • (arr[i] / arr[N -1]) * 100

그리고 결과값을 저장한 변수를 출력한다.

답안 소스

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		double[] arr = new double[N];
		double result = 0.0;
		
		StringTokenizer st = new StringTokenizer(br.readLine()," ");
		
		for(int i=0; i<N; i++) {
			arr[i] = Double.parseDouble(st.nextToken());
		}
		
		Arrays.sort(arr);
		
		for(int i=0; i<N; i++) {
			result = result + (arr[i] / arr[N -1]) * 100;
		}
		System.out.println(result/N);
	}
}

'알고리즘 > 백준' 카테고리의 다른 글

[4344]평균은 넘겠지  (0) 2021.08.01
[8958]OX퀴즈  (0) 2021.08.01
[3052]나머지  (0) 2021.07.27
[2577]숫자의 개수  (0) 2021.07.25
[2562]최댓값  (0) 2021.07.22