[BOJ/JAVA] 10818. 최소, 최대

AmeriKano·2023년 3월 15일
0

문제 설명

문제 링크


접근 방법

배열만을 활용하는 방법, stream을 활용하는 방법 두 가지로 나누어 풀어보았다.
첫번째 방법의 경우 0번째 인덱스의 원소를 초기 최대/최소 값으로 설정한 후 배열 안의 모든 값을 비교하여 최대/최솟값을 갱신해 준다.
두번째 방법은, 입력을 받고 배열의 stream을 생성한다. 정수로 이루어진 스트림 관련 라이브러리인 IntStream에서 제공하는 최대/최소 메서드를 이용해 각각의 값을 구한다.

소스 코드

// 배열을 활용한 방법
import java.io.*;
import java.util.*;

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

        int n = Integer.parseInt(br.readLine());
        int[] arr = Arrays.stream(br.readLine().split(" "))
                .mapToInt(Integer::parseInt).toArray();

        int min = arr[0];
        int max = arr[0];
		// 배열의 모든 값을 비교
        for(int a: arr) {
            if (a > max) max = a;
            if (a < min) min = a;
        }

        bw.write(min+" "+max+"\n");
        
        bw.flush();
        br.close();
        bw.close();
    }
}
// stream을 활용한 방법
import java.io.*;
import java.util.*;

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

        int n = Integer.parseInt(br.readLine());
        int[] arr = Arrays.stream(br.readLine().split(" "))
                .mapToInt(Integer::parseInt).toArray();
        // null일때의 값을 설정하는 orElse()를 사용해도 된다
        int min = Arrays.stream(arr).min().getAsInt();
        int max = Arrays.stream(arr).max().getAsInt();

        bw.write(min+" "+max+"\n");
        
        bw.flush();
        br.close();
        bw.close();
    }
}

제출 결과

배열을 이용한 풀이

스트림을 이용한 풀이


마무리하며

기본적으로 배열을 활용하는 문제였다. 문제를 해결하면서 1학년 때의 추억?이 새록새록 떠올랐다. (그때는 이정도의 로직을 생각해내는 것도 대단하다고 생각했었다.) 그리고 스트림이 매우 편리하나 무조건 빠름을 보장하지는 않는다는 것도 알게 되었다. 68ms가 그렇게 큰 차이는 아니지만, 이 문제의 최대 데이터는 1000000개다. 그보다 더 많은 수를 다루게 되면 더 유의미한 차이가 발생할 수도 있다.
다른 문제에서도 시간 측면에서 효율적인 방법을 고민해보는 것도 재밌을 것 같다.

profile
똑똑한 사람이 되게 해주세요

0개의 댓글