Algorithm/Baekjoon
[백준] 1546번 : 평균 - Java
unknownomad
2022. 3. 4. 20:32
https://www.acmicpc.net/problem/1546
1546번: 평균
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보
www.acmicpc.net
주의점
- 상대/절대 오차 : 10-2 (= 0.01)까지 허용
- 두 번째 줄 : 공백 기준으로 숫자 입력 받음
- 입력 받은 값 중 최대값 M 찾기 ➡ 모든 점수에 (점수 / M) * 100 연산
풀이
1. Scanner + Array
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double arr[] = new double[in.nextInt()];
for(int i = 0; i < arr.length; i++) {
arr[i] = in.nextDouble();
}
in.close();
//오차범위 위해 타입 double로
double sum = 0;
//오름차순 정렬 ➡ 배열 마지막 원소 : 최대값
Arrays.sort(arr);
for(int i = 0; i < arr.length; i++) {
sum += ((arr[i] / arr[arr.length-1]) * 100);
}
System.out.print(sum / arr.length);
}
}
2. BufferedReader + Array
import java.util.Arrays;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
double arr[] = new double[Integer.parseInt(br.readLine())];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < arr.length; i++) {
arr[i] = Double.parseDouble(st.nextToken());
}
double sum = 0;
Arrays.sort(arr);
for(int i = 0; i < arr.length; i++) {
sum += ((arr[i] / arr[arr.length - 1]) * 100);
}
System.out.print(sum / arr.length);
}
}
3. BufferedReader
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
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()); //입력 개수
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
//max와 각 원소 비교 뒤 max보다 큰 수의 값을 max로 초기화하기 위함
//max = -1 : 입력 받을 값이 0보다 크거나 같음
int max = -1;
double sum = 0.0; //자동 형변환 위해 sum만 double 타입 설정
for (int i = 0; i < N; i++) {
int value = Integer.parseInt(st.nextToken());
if(value > max) {
max = value;
}
sum += value;
}
//마지막에 한 번에 연산 후 double 값으로 출력
//제한된 타입의 데이터가 존재할 수 있기에 안전하게 모두 double 타입으로 선언하는 것이 안전하긴 함
System.out.println(((sum / max) * 100.0) / N);
}
}
성능
- BufferedReader
- BufferedReader + Array
- Scanner + Array