이 글에서는 C++에서 구조체(struct) 배열 안에서 최댓값을 찾는 방법을 알아보겠습니다. 예를 들어 아래와 같은 구조체가 주어졌다고 가정해 봅시다.
struct Height{
int feet, inch;
};이 구조체 타입의 배열이 있을 때, 그중 가장 큰 요소를 찾아야 합니다.
핵심 아이디어
접근 방식은 매우 간단합니다. 배열을 처음부터 끝까지 순회하면서, 각 요소의 값을 인치(inch) 단위로 환산한 값과 비교합니다. 이때 환산 공식은 다음과 같습니다.
총 인치 = 12 × feet + inch
순회하면서 가장 큰 값을 계속 추적하고, 해당 요소의 인덱스를 저장하면 됩니다. 마지막에 그 인덱스에 해당하는 구조체가 곧 최댓값을 가진 요소입니다.
예제 코드
#include<iostream>
#include<algorithm>
using namespace std;
struct Height{
int feet, inch;
};
int maxHeight(Height h_arr[], int n){
int index = 0;
int height = INT_MIN;
for(int i = 0; i < n; i++){
int temp = 12 * (h_arr[i].feet) + h_arr[i].inch;
if(temp > height){
height = temp;
index = i;
}
}
return index;
}
int main() {
Height h_arr[] = {{1,3},{10,5},{6,8},{3,7},{5,9}};
int n = sizeof(h_arr)/sizeof(h_arr[0]);
int max_index = maxHeight(h_arr, n);
cout << "Max Height: " << h_arr[max_index].feet << " feet and " << h_arr[max_index].inch << " inches";
}
실행 결과
Max Height: 10 feet and 5 inches
코드 설명
maxHeight() 함수는 초기값을 INT_MIN(정수형이 가질 수 있는 최솟값)으로 설정하여 어떤 배열 요소와도 비교가 가능하도록 합니다. 반복문 안에서 각 구조체의 feet 값을 12배 하여 인치로 변환한 뒤 inch를 더하고, 현재까지의 최댓값보다 크면 그 값을 갱신하고 인덱스도 함께 저장합니다.
위 예제에서는 {1,3}, {10,5}, {6,8}, {3,7}, {5,9} 중 12×10+5 = 125인치로 {10,5}가 가장 크므로, 실행 결과로 '10 feet and 5 inches'가 출력됩니다.
마무리
이처럼 구조체 배열에서 최댓값을 찾을 때는, 여러 멤버 변수를 하나의 비교 기준 값으로 변환한 뒤 순차적으로 비교하는 것이 핵심입니다. 이 패턴은 나이, 점수, 좌표 등 다양한 복합 데이터 구조에도 동일하게 적용할 수 있습니다.