배열이나 리스트에 담긴 여러 값 중에서 최댓값과 최솟값이 어느 위치(인덱스)에 있는지 확인해야 하는 경우가 종종 있습니다. 이 글에서는 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[] 배열을 사용했습니다. 반면 직접 작성한 선형 탐색 함수는 기본형 배열을 그대로 다룰 수 있으므로, 두 가지 방식을 상황에 맞게 조합하면 효율적인 코드를 작성할 수 있습니다.