[백준] 1546: 평균 - JAVA[자바] (feat. 배열의 최댓값 구하기)

다인·2024년 6월 21일

백준

목록 보기
4/112
post-thumbnail

배열에서 max를 구하는 방법을 여러가지로 해보았다. 물론, 배열을 사용하지 않고도 풀어 보았다.
모두 Scanner가 아닌 BufferedReader를 사용했다.
그런데, 다 풀고 보니 1번과 4번 방법은 굳이 배열을 안 써도 됐네 ^-^
arr[i] = a; 한 줄만 지우면 되겠다. 성능 비교하려고 해봤다고 생각하자 ㅎ

배열 사용

1. Math 함수 사용

import java.io.*;
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 max = Double.MIN_VALUE;
        double sum = 0;
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0; i<N; i++){
            double a = Double.parseDouble(st.nextToken());
            arr[i] = a;
            max = Math.max(max, a);
            sum += a;
        }
        System.out.print(sum / (double)N / max*100);
    }
}
  • double형으로 다 맞추기 주의...

2. Stream 사용

import java.io.*;
import java.util.StringTokenizer;
import java.util.Arrays;

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 sum = 0;
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0; i<N; i++){
            double a = Double.parseDouble(st.nextToken());
            arr[i] = a;
            sum += a;
        }
        double max = Arrays.stream(arr).max().getAsDouble();
        
        System.out.print(sum / (double)N / max*100);
    }
}

3. Arrays.sort() 사용

import java.io.*;
import java.util.StringTokenizer;
import java.util.Arrays;

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 sum = 0;
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0; i<N; i++){
            double a = Double.parseDouble(st.nextToken());
            arr[i] = a;
            sum += a;
        }
        Arrays.sort(arr);
        double max = arr[arr.length-1];
        
        System.out.print(sum / (double)N / max*100);
    }
}

4. 삼항 연산자 사용

import java.io.*;
import java.util.StringTokenizer;
import java.util.Arrays;

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 max = Double.MIN_VALUE;
        double sum = 0;
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0; i<N; i++){
            double a = Double.parseDouble(st.nextToken());
            arr[i] = a;
            sum += a;
            max = max > a ? max : a;
        }
        System.out.print(sum / (double)N / max*100);
    }
}

성능 비교

성능 차이는 별로 없고, Math 함수 쓰는 게 가장 좋구만

배열 사용X

import java.io.*;
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 max = Double.MIN_VALUE;
        double sum = 0;
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0; i<N; i++){
            double a = Double.parseDouble(st.nextToken());
            if(a > max)
                max = a;
            sum += a;
        }
        System.out.print(sum / (double)N / max*100);
    }
}

역시 배열 안 쓰는 게 젤 쉽다 ㅎ

0개의 댓글