be_better

[백준] 10818번 - 최소, 최대 본문

코딩테스트/백준

[백준] 10818번 - 최소, 최대

NiceTry 2023. 8. 9. 22:41

목차

    💎 문제 링크

    https://www.acmicpc.net/problem/10818

     

    10818번: 최소, 최대

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

    www.acmicpc.net

     

    📝 문제

     

    ✍🏻 입력 & 출력

     

    🤔 풀기 전에 생각하기

    입력받은 값들을 int 배열에 넣어놓고 값을 하나하나 비교해서 최솟값과 최댓값을 구하는 문제라고 이해

     

    하지만 기준 숫자를 두고 크고 작은 숫자들을 찾는 문제는 아니기 때문에

    오름차순이나 내림차순 정렬을 하면 양 끝 인덱스의 값들만 조회하면 해결되는 문제

     

    1. 입력받는 값들을 배열에 넣고 정렬 후 0번 인덱스는 최솟값, 배열의 마지막 인덱스는 최댓값으로 문제 해결
    2. 입력받는 값들을 배열에 넣고 모든 값을 조회하며 최솟값, 최댓값을 각각 직접 구해주면 문제 해결

    두가지 방법을 다 구현해봤다.

     

    ✨ 풀이

    🧶 Arrays.sort() 를 이용한 풀이

    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            int inputNum = scanner.nextInt(); // 정수의 개수
            int[] numbers = new int[inputNum]; // 입력받는 정수 배열
    
            // 입력받은 숫자 numbers 에 삽입
            for (int i = 0; i < inputNum; i++) {
                numbers[i] = scanner.nextInt();
            }
    
            // Arrays.sort() 를 이용해 배열 오름차순 정렬
            Arrays.sort(numbers);
    
            int min = numbers[0]; // 최솟값은 0번째 인덱스
            int max = numbers[numbers.length - 1]; // 최댓값은 제일 마지막 인덱스
    
            System.out.println(min + " " + max);
        }
    }


    🧶 for문으로 min, max을 계속 갱신하는 풀이

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            int inputNum = scanner.nextInt(); // 정수의 개수
            int[] numbers = new int[inputNum]; // 입력받는 정수 배열
    
            // 입력받은 숫자 numbers 에 삽입
            for (int i = 0; i < inputNum; i++) {
                numbers[i] = scanner.nextInt();
            }
            
            int min = 1000001;  // min 값을 최대 입력값인 1000000보다 1 큰 수로 초기화
            int max = -1000001; // max 값을 최소 입력값인 -1000000보다 1 작은 수로 초기화
    
            // for-each로 원소값을 min, max와 비교
            for (int i : numbers) {
                if (i < min) { // i값이 최솟값을 의미하는 min 보다 작으면
                    min = i;   // min 을 i로 갱신
                }
                if (i > max) { // i값이 최댓값을 의미하는 max 보다 크면
                    max = i;   // max 를 i로 갱신
                }
            }
    
            System.out.println(min + " " + max);
        }
    }

     

    '코딩테스트 > 백준' 카테고리의 다른 글

    [백준] 10807번 - 개수 세기  (0) 2023.08.15
    [백준] 2830번 - 행성 X3  (0) 2023.08.15
    [백준] 24174번 - 힙 정렬 2  (0) 2023.08.13
    [백준] 1158번 - 요세푸스 문제  (0) 2023.08.11
    [백준] 1021번 - 회전하는 큐  (0) 2023.08.08