알고리즘 공부/백준 문제풀이

[백준] 10818 최소, 최대 - (JAVA)

송테이토 2022. 9. 3. 16:28

최소, 최대

문제

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

입력

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

출력

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

예제 입력 1

5
20 10 35 30 7

예제 출력 1

7 35

풀이

import java.util.Scanner;

public class B10818 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();

		int[] arr = new int[N];

		int max = -1000000;
		int min = 1000000;
		for (int i = 0; i < arr.length; i++) {
			arr[i] = sc.nextInt();

			if (arr[i] > max) { // 만약 arr[0]번째가 현재 max보다 크면 그게 최대
				max = arr[i];
			}

			if (arr[i] < min) {
				min = arr[i];
			}
		}
		System.out.println(min + " " + max);
		sc.close();
	}

}

 


틀린시도

첫 시도를 이렇게 풀었었는데 틀렸었다.

import java.util.Scanner;

public class B10818 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();

		int[] arr = new int[N];

		int max = -1000000;
		int min = 1000000;
		for (int i = 0; i < arr.length; i++) {
			arr[i] = sc.nextInt();

			if (arr[i] > max) { // 만약 arr[0]번째가 현재 max보다 크면 그게 최대
				max = arr[i];
			} else if (arr[i] < min) {
				min = arr[i];
			}
		}
		System.out.println(min + " " + max);
		sc.close();
	}

}

모든 수가 음수일 때 이상하게 나온다.

만약 배열에 수가 하나인 경우엔 그 수가 최소값이자 최대값이 되겠지만 if - else if문을 사용하면 둘 중 하나만 갱신되기 때문에 값이 제대로 반영되지 않는다.