백준 20053번 : 최소, 최대 2

1. 문제

문제

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

입력

첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 두 줄로 이루어져 있다.

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

출력

각 테스트 케이스마다 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 한 줄에 하나씩 차례대로 출력한다.

2. 코드

package solv.marathon.course012;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int T = Integer.parseInt(br.readLine());
		for (int i = 0; i < T; i++) {
			int N = Integer.parseInt(br.readLine());
			int[] list = new int[N];
			StringTokenizer token = new StringTokenizer(br.readLine());
			for (int j = 0; j < list.length; j++) {
				list[j] = Integer.parseInt(token.nextToken());
			}
			Arrays.sort(list);
			bw.write(list[0] + " " + list[N - 1] + "\n");
		}
		bw.flush();
		bw.close();
	}

}

3. 해설

배열의 정렬 기능을 이용해서 첫 인덱스와 마지막 인덱스의 값을 출력한다
문제점 : N이 1,000,000 까지 받아오는데 배열의 크기가 그만큼 커지니 시간이 오래걸림

4. 다른 풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int T = Integer.parseInt(br.readLine());
		for (int i = 0; i < T; i++) {
			int N = Integer.parseInt(br.readLine());
			int max = -1000001;
			int min = 1000001;
			StringTokenizer token = new StringTokenizer(br.readLine());
			for (int j = 0; j < N; j++) {
				int num = Integer.parseInt(token.nextToken());
				max = Math.max(max, num);
				min = Math.min(min, num);
			}
			bw.write(min + " " + max + "\n");
		}
		bw.flush();
		bw.close();
	}

}
  • 숫자 하나를 받을 때마다 현재 최소 최대랑 비교해서 최소값 최대값을 최신화한다