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

 


출처 : https://st-lab.tistory.com/47