Algorithm/Baekjoon

백준 / 입출력 / 10818번 / 최소, 최대

Gyuri 2022. 7. 3. 15:40

[문제]

N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

[입력]

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

[출력]

첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.

[예제 입력]

5
20 10 35 30 7

[예제 출력]

7 35

 

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

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int[] arr = new int[n];
        
        for(int i=0; i<n; i++) {
            arr[i] = sc.nextInt();
        }
        Arrays.sort(arr);

        System.out.print(arr[0] + " " + arr[n-1]);
    }
}

배열을 사용해 n개의 숫자를 넣어준 후, Arrays.sort를 이용해 오름차순으로 정렬했다.

arr[0]이 배열의 숫자 중 최솟값, arr[n-1]이 최댓값이 된다.

 


 

시간이 오래걸리길래

다른 풀이 방법이 있는지 찾아봤는데, 

BufferdReader를 쓰는 방식이 있었다.

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 NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine()); // 공백도 같이 입력됨
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int idx = 0;
        int[] arr = new int[n];
        while(st.hasMoreTokens()) {
            arr[idx] = Integer.parseInt(st.nextToken());
            idx++;
        }

        Arrays.sort(arr);
        System.out.print(arr[0] + " " + arr[n-1]);
    }
}

readLine은 공백도 같이 입력된다.

StringTokenizer로 공백을 분리해준 후, 최소값/최대값을 구한다.

 

주의할 점은st.nextToken은 문자열을 반환하므로 int형으로 변환해줘야 한다.