수행일자 : 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 |