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

Java로 배열에서 최댓값과 최솟값의 위치(인덱스) 찾는 방법

배열이나 리스트에 담긴 여러 값 중에서 최댓값과 최솟값이 어느 위치(인덱스)에 있는지 확인해야 하는 경우가 종종 있습니다. 이 글에서는 Java의 Collections 클래스와 선형 탐색(Linear Search)을 활용해 최댓값·최솟값과 그 위치를 함께 구하는 방법을 예제와 함께 살펴보겠습니다.

예제 코드

import java.util.*;
import java.util.Arrays;
import java.util.Collections;
public class Demo{
   public static int index_val(int my_arr[], int t){
      if (my_arr == null){
         return -1;
      }
      int len = my_arr.length;
      int i = 0;
      while (i < len){
         if (my_arr[i] == t){
            return i;
         } else {
            i = i + 1;
         }
      }
      return -1;
   }
   public static void main(String[] args){
      Integer[] my_arr = { 34, 67, 89, 99, 45, 77 };
      int[] my_int_arr = { 34, 67, 89, 99, 45, 77 };
      int min_val = Collections.min(Arrays.asList(my_arr));
      int max_val = Collections.max(Arrays.asList(my_arr));
      System.out.println("The minimum value in the array is : " + min_val);
      System.out.println("The maximum value in the array is : " + max_val);
      System.out.println("The position of the minimum value is: " + index_val(my_int_arr, min_val));
      System.out.println("The position of the maximum value is: " + index_val(my_int_arr, max_val));
   }
}

실행 결과

The minimum value in the array is : 34
The maximum value in the array is : 99
The position of the minimum value is: 0
The position of the maximum value is: 3

코드 설명

위 프로그램은 크게 두 부분으로 나누어 이해할 수 있습니다.

먼저 Demo 클래스에는 index_val()이라는 선형 탐색 함수가 정의되어 있습니다. 이 함수는 매개변수로 전달받은 배열에서 특정 값(t)이 처음 등장하는 인덱스를 반환합니다. 만약 배열이 null이거나 해당 값을 찾지 못하면 -1을 반환하여 값을 찾지 못했음을 알립니다.

다음으로 main() 메서드에서는 정수 배열을 생성한 뒤, Collections.min()Collections.max()를 사용해 배열 내 최솟값과 최댓값을 구합니다. 이때 Arrays.asList()를 사용해 배열을 리스트로 변환한 점에 주목하세요. 이후 앞서 정의한 선형 탐색 함수에 배열과 최솟값, 최댓값을 각각 전달하여 두 값의 인덱스를 얻어 출력합니다.

실행 결과를 보면 최솟값인 34는 인덱스 0에, 최댓값인 99는 인덱스 3에 위치하고 있음을 확인할 수 있습니다.

참고 사항

Collections.min()Collections.max()는 객체 타입 컬렉션에서만 동작하기 때문에 기본형 int[] 배열 대신 Integer[] 배열을 사용했습니다. 반면 직접 작성한 선형 탐색 함수는 기본형 배열을 그대로 다룰 수 있으므로, 두 가지 방식을 상황에 맞게 조합하면 효율적인 코드를 작성할 수 있습니다.