C++에서 배열의 최댓값과 최솟값을 구하는 방법을 알아보겠습니다. 예를 들어 배열이 [12, 45, 74, 32, 66, 96, 21, 32, 27]과 같다면 최댓값은 96, 최솟값은 12가 됩니다.
이럴 때 반복문으로 일일이 비교하는 대신, 표준 라이브러리(STL)의 <algorithm> 헤더에 포함된 max_element() 함수와 min_element() 함수를 사용하면 한 줄로 간단하게 처리할 수 있습니다.
예제 코드
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int arr[] = {12, 45, 74, 32, 66, 96, 21, 32, 27};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Array is like: ";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << "\nMax Element is: " << *max_element(arr, arr + n);
cout << "\nMin Element is: " << *min_element(arr, arr + n);
}
실행 결과
Array is like: 12 45 74 32 66 96 21 32 27
Max Element is: 96
Min Element is: 12
코드 핵심 포인트
1. 반복자(iterator) 반환
max_element()와 min_element()는 값 자체가 아니라 해당 요소를 가리키는 반복자를 반환합니다. 따라서 실제 값을 얻으려면 앞에 역참조 연산자(*)를 붙여야 합니다.
2. 인수 전달 방식
첫 번째 인수에는 탐색 범위의 시작 주소(arr), 두 번째 인수에는 마지막 요소의 다음 주소(arr + n)를 전달합니다. 이는 STL에서 널리 사용되는 반개구간 [first, last) 방식입니다.
3. 시간 복잡도
두 함수 모두 배열을 한 번 순회하며 최댓값·최솟값을 찾으므로 시간 복잡도는 O(n)입니다. 직접 반복문을 작성하는 것과 성능은 같지만, 코드가 훨씬 간결하고 가독성이 좋습니다.
4. vector 등 STL 컨테이너에도 적용 가능
배열뿐 아니라 vector와 같은 컨테이너에도 동일하게 사용할 수 있습니다. 예를 들어 *max_element(v.begin(), v.end())처럼 작성하면 벡터의 최댓값을 바로 얻을 수 있습니다.