Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 구조체 배열에서 최댓값 찾는 방법 완벽 정리

이 글에서는 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'가 출력됩니다.

마무리

이처럼 구조체 배열에서 최댓값을 찾을 때는, 여러 멤버 변수를 하나의 비교 기준 값으로 변환한 뒤 순차적으로 비교하는 것이 핵심입니다. 이 패턴은 나이, 점수, 좌표 등 다양한 복합 데이터 구조에도 동일하게 적용할 수 있습니다.