이 문제에서는 배열이 제공됩니다. 우리의 임무는 배열에서 최대 삼중항 합을 찾는 프로그램을 만드는 것입니다. 즉, 합이 최대인 세 개의 요소 집합을 찾는 것입니다.
문제를 이해하기 위해 예를 들어보겠습니다.
입력 - 배열 ={4, 6, 1, 2}
출력 − 12
설명 -
all triplets are : (4, 6, 1) = 4+6+1 = 11 (4, 6, 2) = 4+6+1 = 12 (4, 1, 2) = 4+6+1 = 7 (6, 1, 2) = 4+6+1 = 9 The maximum triplet sum is 12
문제를 해결하기 위한 한 가지 간단한 접근 방식은 모든 삼중항 쌍에 대한 합계 값을 취한 다음 최대값을 찾는 예제에서 설명한 것입니다. 그러나 이 접근 방식은 모든 세 쌍의 길이가 커질수록 효과적이지 않습니다.
이 방법에서는 세 개의 루프를 실행하여 가능한 모든 합 삼중항을 찾고 이 삼중항의 합이 최대합보다 크면 이 삼중항 합을 최대합으로 초기화합니다.
예시
우리의 솔루션을 설명하는 프로그램,
#include <iostream> using namespace std; int maxSum(int arr[], int n){ int maxSum = 0; int i, j, k; for (i = 0; i < n; i++) for (j = i + 1; j < n; j++) for (k = j + 1; k < n; k++) if (maxSum < arr[i] + arr[j] + arr[k]) maxSum = arr[i] + arr[j] + arr[k]; return maxSum; } int main(){ int arr[] = { 3, 5, 7 ,1, 9, 0 }; int n = sizeof(arr) / sizeof(arr[0]); cout<<"The maximum triplet sum of the array is "<<maxSum(arr, n); return 0; }
출력
The maximum triplet sum of the array is 21
효과적인 접근 방식은 배열을 정렬한 다음 3중항의 최대 합이 될 배열의 마지막 세 요소의 합을 찾는 것입니다.
예시
솔루션을 설명하는 프로그램,
#include <bits/stdc++.h> using namespace std; int maxSum(int arr[], int n) { sort(arr, arr + n); return arr[n - 1] + arr[n - 2] + arr[n - 3]; } int main() { int arr[] = { 3, 5, 9, 1, 2, 8, 7 }; int n = sizeof(arr) / sizeof(arr[0]); cout<<"The maximum triplet sum of the array is "<<maxSum(arr, n); return 0; }
출력
The maximum triplet sum of the array is 24