Java에서 세 번째로 작은 숫자 찾기: 전체 가이드

게시 됨: 2023-08-23

배열, 목록 또는 정수 스트림에서 세 번째로 작은 숫자를 효율적으로 찾는 방법에 대해 궁금한 적이 있습니까? 이 블로그 게시물에서는 Java 프로그래밍의 세계에 대해 알아보고 다양한 데이터 소스에서 세 번째로 작은 숫자를 식별하는 다양한 기술을 살펴보겠습니다.

Java에서 세 번째로 작은 숫자 찾기 - 종합 안내서

데이터 조작 및 분석 작업을 수행할 때 숫자 모음 내에서 특정 요소를 식별해야 하는 경우가 종종 있습니다. 가장 작은 숫자나 가장 큰 숫자를 찾는 것은 상대적으로 간단하지만, 세 번째로 작은 숫자를 결정하려면 좀 더 정교함이 필요합니다. 이 블로그 게시물에서는 Java를 사용하여 이 문제를 해결하는 세 가지 방법인 배열 정렬, 목록 정렬 및 스트림 활용을 다룰 것입니다.

방법 1: 배열 정렬

배열은 Java의 기본 데이터 구조 중 하나이므로 탐색의 자연스러운 시작점이 됩니다. 여기서 아이디어는 배열을 오름차순으로 정렬한 다음 인덱스 2에서 요소를 검색하는 것입니다.

방법 2: 목록 정렬

목록은 배열에 대한 보다 유연한 대안을 제공하므로 동적으로 크기를 조정하고 보다 쉽게 ​​조작할 수 있습니다. 목록에서 세 번째로 작은 숫자를 찾으려면 배열 정렬과 유사한 접근 방식을 따를 수 있습니다.

방법 3: 스트림 활용

Java 스트림은 요소 시퀀스를 처리하는 강력한 방법입니다. 스트림을 사용하여 요소를 정렬한 다음 세 번째로 작은 숫자를 검색할 수 있습니다.

올바른 방법 선택

각 방법에는 고유한 장점과 사용 사례가 있습니다. 배열이 있으면 배열 정렬 방법이 가장 효율적일 수 있습니다. 목록은 다목적이며 더 많은 편의성을 제공하는 반면, 스트림은 기능적 접근 방식을 제공하고 더 큰 데이터 세트를 쉽게 처리할 수 있습니다.

완전한 예는 다음과 같습니다.

CrunchyThirdSmallestNumberFinder.java

 패키지 crunchify.com.tutorial;

import java.util.Arrays;
java.util.List 가져오기;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author Crunchify.com
 * Java에서 세 번째로 작은 숫자 찾기: 종합 가이드
 *
 */

공개 클래스 CrunchyThirdSmallestNumberFinder {

    // 배열에서 세 번째로 작은 숫자를 찾는 방법
    공개 정적 int findCrunchyThirdSmallest(int[] crunchArr) {
        if (crunchArr.length < 3) {
            throw new IllegalArgumentException("배열에는 최소 3개의 크런치 요소가 포함되어야 합니다.");
        }

        // 크런치 배열을 오름차순으로 정렬합니다.
        Arrays.sort(crunchArr);
        crunchArr[2]를 반환합니다. // 세 번째로 작은 크런치 요소를 반환합니다.
    }

    // 목록에서 세 번째로 작은 숫자를 찾는 방법
    공개 정적 int findCrunchyThirdSmallest(List<Integer> crunchList) {
        if (crunchList.size() < 3) {
            throw new IllegalArgumentException("목록에는 최소 3개의 크런치 요소가 포함되어야 합니다.");
        }

        // 스트림을 사용하여 크런치 목록을 정렬하고 정렬된 요소를 새 목록으로 수집합니다.
        List<Integer> sortedCrunchList = crunchList.stream()
                .정렬()
                .collect(Collectors.toList());

        return sortedCrunchList.get(2); // 세 번째로 작은 크런치 요소를 반환합니다.
    }

    // 스트림에서 세 번째로 작은 크런치 숫자를 찾는 방법
    공개 정적 int findCrunchyThirdSmallest(Stream<Integer> crunchStream) {
        // 크런치 스트림에서 요소를 수집하고 정렬한 후 목록으로 수집합니다.
        List<Integer> sortedCrunchList = crunchStream.sorted().collect(Collectors.toList());

        if (sortedCrunchList.size() < 3) {
            throw new IllegalArgumentException("스트림에는 최소 3개의 크런치 요소가 포함되어야 합니다.");
        }

        return sortedCrunchList.get(2); // 세 번째로 작은 크런치 요소를 반환합니다.
    }

    공개 정적 무효 메인(String[] args) {
        int[] crunchArr = {35, 62, 28, 31, 13, 97};
        List<Integer> crunchList = Arrays.asList(9, 14, 676, 62, 11, 328);
        Stream<Integer> crunchStream = Stream.of(427, 53, 71, 99, 25, 62);

        // 다른 소스를 사용하여 바삭바삭한 세 번째로 작은 숫자를 찾습니다.
        int crunchyThirdSmallestFromArr = findCrunchyThirdSmallest(crunchArr);
        int crunchyThirdSmallestFromList = findCrunchyThirdSmallest(crunchList);
        int crunchyThirdSmallestFromStream = findCrunchyThirdSmallest(crunchStream);

        // 바삭바삭한 세 번째로 작은 숫자를 인쇄합니다.
        System.out.println("arr에서 세 번째로 작은 크런치: " + crunchyThirdSmallestFromArr);
        System.out.println("목록에서 세 번째로 작은 크런치: " + crunchyThirdSmallestFromList);
        System.out.println("스트림에서 세 번째로 작은 크런치: " + crunchyThirdSmallestFromStream);
    }
}

Eclipse 콘솔 결과:

Eclipse IDE 또는 IntelliJ IDEA에서 위 프로그램을 실행하면 아래와 같은 결과가 나타납니다.

 arr에서 세 번째로 작은 크런치: 31
목록에서 세 번째로 작은 크런치: 14
스트림에서 세 번째로 작은 크런치: 62

종료 코드 0으로 프로세스가 완료되었습니다.

고려해야 할 몇 가지 성능 차이가 있습니다.

시간 복잡도 측면에서 세 가지 방법 모두 유사한 정렬 단계를 가지며 일반적으로 시간 복잡도는 O(n log n) 입니다. 여기서 'n'은 컬렉션(배열, 목록 또는 스트림)의 요소 수입니다.

세 번째로 작은 요소에 액세스하는 데 걸리는 시간 복잡도는 단순한 배열 또는 목록 조회이므로 O(1) 으로 일정합니다.

  1. 배열 방법: 이 방법은 배열을 제자리에 정렬하므로 새로 정렬된 컬렉션을 위한 추가 메모리가 필요하지 않습니다. 이로 인해 목록 및 스트림 방법에 비해 메모리 사용량이 약간 더 좋아질 수 있습니다.
  2. 목록 방법: 이 방법은 스트림을 사용하여 목록을 정렬된 목록으로 변환합니다. 편리하지만 추가 메모리를 소비하는 새 목록을 생성해야 합니다. 메모리 사용량이 중요한 경우 이는 문제가 될 수 있습니다.
  3. 스트림 방법: 스트림 방법은 매우 유연하고 기능적이지만 스트림을 목록으로 수집하는 작업이 포함됩니다. 이는 배열을 직접 정렬하는 것에 비해 메모리 및 처리 측면에서 약간의 오버헤드를 추가합니다.

이 코드를 실행하는 데 문제가 있으면 알려주십시오.