Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java로 리스트(List)에서 최솟값과 최댓값 구하는 방법

이 글에서는 Java를 사용해 리스트(List)에서 최솟값최댓값을 구하는 방법을 알아보겠습니다.

리스트란 무엇인가?

리스트는 요소를 순차적으로 저장하고 접근할 수 있는 정렬된 컬렉션(ordered collection)입니다. 인덱스 기반 메서드를 제공하기 때문에 요소를 손쉽게 삽입, 수정, 삭제, 검색할 수 있으며, 중복된 요소도 허용합니다.

문제 상황 예시

아래와 같은 입력 리스트가 있다고 가정해 보겠습니다.

입력 리스트: [500, 650, 300, 250, 110]

원하는 출력 결과는 다음과 같습니다.

리스트의 최솟값: 110
리스트의 최댓값: 650

알고리즘

전체 과정은 다음 단계로 진행됩니다.

  1. 시작 — 프로그램을 실행합니다.
  2. input_list라는 이름의 리스트를 선언합니다.
  3. 리스트에 값을 정의(추가)합니다.
  4. 내장 함수 Collections.sort()를 사용해 리스트를 오름차순으로 정렬합니다.
  5. 정렬된 리스트의 첫 번째 요소가 최솟값, 마지막 요소가 최댓값입니다. 빈 리스트 여부는 Integer.MAX_VALUE, Integer.MIN_VALUE로 처리합니다.
  6. 결과를 화면에 출력합니다.
  7. 종료

예제 1: main 함수에서 모든 로직 처리

첫 번째 방식은 모든 연산을 main 함수 안에서 한 번에 처리하는 절차적 접근입니다.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Demo {
    public static void main(String[] args) {
        System.out.println("필요한 패키지를 가져왔습니다");
        List<Integer> input_list = new ArrayList<>();
        input_list.add(500);
        input_list.add(650);
        input_list.add(300);
        input_list.add(250);
        input_list.add(110);
        System.out.println("정의된 리스트: " + input_list);
        List<Integer> sortedlist = new ArrayList<>(input_list);
        Collections.sort(sortedlist);
        if (sortedlist == null || sortedlist.size() == 0) {
            System.out.println("\n리스트의 최솟값: " + Integer.MAX_VALUE);
        }
        System.out.println("\n리스트의 최솟값: " + sortedlist.get(0));
        if (sortedlist == null || sortedlist.size() == 0) {
            System.out.println("리스트의 최댓값: " + Integer.MIN_VALUE);
            return;
        }
        int list_size = sortedlist.size() - 1;
        System.out.println("리스트의 최댓값: " + sortedlist.get(list_size));
    }
}

실행 결과

필요한 패키지를 가져왔습니다
정의된 리스트: [500, 650, 300, 250, 110]

리스트의 최솟값: 110
리스트의 최댓값: 650

예제 2: 객체 지향 방식으로 함수 분리

두 번째 방식은 연산을 별도의 함수로 캡슐화하여 재사용성과 가독성을 높인 객체 지향 프로그래밍(OOP) 스타일입니다.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Demo {
    public static Integer get_min_value(List<Integer> sortedlist) {
        if (sortedlist == null || sortedlist.size() == 0) {
            return Integer.MAX_VALUE;
        }
        return sortedlist.get(0);
    }

    public static Integer get_max_value(List<Integer> sortedlist) {
        if (sortedlist == null || sortedlist.size() == 0) {
            return Integer.MIN_VALUE;
        }
        int list_size = sortedlist.size() - 1;
        return sortedlist.get(list_size);
    }

    public static void main(String[] args) {
        System.out.println("필요한 패키지를 가져왔습니다");
        List<Integer> input_list = new ArrayList<>();
        input_list.add(500);
        input_list.add(650);
        input_list.add(300);
        input_list.add(250);
        input_list.add(110);
        System.out.println("정의된 리스트: " + input_list);
        List<Integer> sortedlist = new ArrayList<>(input_list);
        Collections.sort(sortedlist);
        System.out.println("\n리스트의 최솟값: " + get_min_value(sortedlist));
        System.out.println("리스트의 최댓값: " + get_max_value(sortedlist));
    }
}

실행 결과

필요한 패키지를 가져왔습니다
정의된 리스트: [500, 650, 300, 250, 110]

리스트의 최솟값: 110
리스트의 최댓값: 650

더 간단한 대안: Collections.min() / max()

사실 Java에서는 리스트를 직접 정렬하지 않고도 java.util.Collections 클래스가 제공하는 유틸리티 메서드로 최솟값과 최댓값을 즉시 구할 수 있습니다.

int min = Collections.min(input_list); // 110
int max = Collections.max(input_list); // 650

또한 Java 8 이상에서는 Stream API를 활용할 수도 있습니다.

int min = input_list.stream().mapToInt(Integer::intValue).min().getAsInt();
int max = input_list.stream().mapToInt(Integer::intValue).max().getAsInt();

마무리

정리하면, 리스트에서 최솟값과 최댓값을 구하는 대표적인 방법은 세 가지입니다.

  • 정렬 후 첫/마지막 요소 조회 — 알고리즘 학습에 유용하지만 O(n log n)의 시간 복잡도가 듭니다.
  • Collections.min() / max() — 가장 간결하고 실무에서 널리 쓰이는 방식입니다.
  • Stream API — 함수형 스타일로 필터링 등 추가 연산과 조합하기 좋습니다.

상황에 맞는 방법을 선택해 효율적으로 활용해 보시기 바랍니다.