1.5.11 최대 합 구하기
문제 1-11 주어진 배열을 회전해 arr[i] × (i+1)의 최대 합을 구하세요.
해결책 1-11
int maxCircularSum(int arr[], int n) { int sumAll = 0; int currVal = 0; int maxVal; for (int i = 0; i < n; i++) { sumAll += arr[i]; currVal += ((i + 1) * arr[i]); } maxVal = currVal; for (int i = 1; i < n; i++) { currVal = (currVal + sumAll) - (n * arr[n-i]); if (currVal > maxVal) { maxVal = currVal; } } return maxVal; } /* 테스트 코드 */ int main() { int arr[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; printf("최대 합: %d", maxCircularSum(arr, sizeof(arr) / sizeof(int))); }
분석 시간 복잡도는 O(n)이며, 공간 복잡도는 O(1)입니다.