코딩크리처 2024. 8. 28. 01:04

문제 이름 : 최소, 최대


문제

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

최소값과 최대값을 구하는 방법이 뭘까?

한번 일차원적으로 생각해 보자.


그리고 쪼개서 생각 해 보자.

지속적으로 들어오는 수들의 최소값과 최대값을 구하는 방법이 뭘까?

  1. 최소값과 최대값을 먼저 설정하고 비교하는 방식
  2. 첫 번째 값을 최소값과 최대값에 할당하는 방식

1. 최소값과 최대값을 먼저 설정하는 방식

문제에 작성되어 있듯이, 주어지는 변수는 마이너스 백만에서 플러스 백만이다.

그렇다면, 마이너스 백만일, 그리고 플러스 백만일 로 최소값, 최대값을 할당해도 된다.

그것보다 더 편한 방식이 있는데, 초기화되는 변수에 할당될 수 있는 가장 낮은 값가장 높은 값 을 할당하는 방식이 있다.

이는 Integer.MIN_VALUE, 그리고 Integer.MAX_VALUE 로 불러올 수 있다.

그런데, 최대값에 최대값 을 할당하는 것이 아니라, 최소값 을 할당해야 한다는 것을 꼭 기억하자.


2. 첫 번째 값을 최소값과 최대값으로 사용하기

물론 위의 방식은 무조건 1 개 이상의 요소가 비교 대상으로 들어오기 때문에 편히 사용 가능하다.

그런데, 이런 생각을 해 볼 수 있다.

요소가 전혀 들어오지 않는다면?

즉, 요소가 0개 라면?

그러면 최소값과 최대값이 그대로 Integer.MIN_VALUEInteger.MAX_VALUE 가 된다.

현재 문제는 정수의 개수가 1개 이상으로 들어오기에 그런 일은 없겠지만,

그런 상황에 대비하여 2 개의 답을 작성 해 보자.


Answer1 - 최소값과 최대값 먼저 설정


import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int max = Integer.MIN_VALUE; // int 타입의 최대값 +21억쯤 
        int min = Integer.MAX_VALUE; // int 타입의 최소값 -21억쯤

        int N = Integer.parseInt(br.readLine());

        StringTokenizer st = new StringTokenizer(br.readLine());

        for(int i = 0; i < N; i++) {
            int num = Integer.parseInt(st.nextToken());
            min = (min > num) ? num : min;
            max = (max < num) ? num : max;
        }

        System.out.println(min + " " + max);
    }
}

Answer2 - 첫 번째 값을 최소값과 최대값으로 사용하기

import java.util.*;
import java.io.*;

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());

        StringTokenizer st = new StringTokenizer(br.readLine());

        int min = Integer.parseInt(st.nextToken());
        int max = min;

        // 두 번째 요소부터 비교 시작. - 만약 요소가 1개라면 실행되지 않음.
        for(int i = 1; i < N; i++) {
            int num = Integer.parseInt(st.nextToken());
            min = (min > num) ? num : min;
            max = (max < num) ? num : max;
        }


        System.out.println(min + " " + max);
    }
}

틀린 것이 있다면 댓글 부탁드립니다!