Algorithm & Data Structure/Baekjoon

[Baekjoon/Java] 최소, 최대

ju_young 2023. 10. 18. 16:41
728x90

문제

 

10818번: 최소, 최대

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

www.acmicpc.net

풀이

1. 정렬을 통한 풀이

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int[] intArray = new int[N];
        for (int i=0; i<N; i++) {
            intArray[i] = scanner.nextInt();
        }

        Arrays.sort(intArray);
        System.out.printf("%d %d", intArray[0], intArray[N - 1]);
    }
}

Arrays.Sort는 TimSort 알고리즘을 사용하여 정렬을 하며 시간복잡도는 O(nlogn) 이다.

2. stream의 max(), min()을 사용한 풀이

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int[] intArray = new int[N];
        for (int i=0; i<N; i++) {
            intArray[i] = scanner.nextInt();
        }

        System.out.printf("%d %d", Arrays.stream(intArray).min().getAsInt(), Arrays.stream(intArray).max().getAsInt());
    }
}

stream의 max(), min() 메소드는 한 번만 순회(Linear traversal)를 하기 때문에 시간복잡도는 O(n)이다.

728x90