https://www.acmicpc.net/problem/21758
#include <iostream>
using namespace std;
int max(int a,int b){
if(a>b){
return a;
}
else{
return b;
}
}
int arr[100001];
int sum[100001];
int main(void){
int n;
cin >> n;
for(int i = 0;i<n;i++){
cin >> arr[i];
sum[i] = sum[i-1] + arr[i];
}
//1) 벌과 벌 사이 꿀통 위치 벌---꿀통----벌
int max_sum = 0;
int left = 0;
int right = n-1;
/* 꿀통이 left - right 사이에 위치할 때 꿀의 양의 합 */
for(int i = 1;i<n-1;i++){
int sum_l = sum[n-1] - arr[left] - (sum[n-1] - sum[i]);
int sum_r = sum[n-1] - sum[i] - arr[right] + arr[i];
max_sum = max(max_sum,sum_l + sum_r);
}
/*꿀통이 벌 2마리의 위치보다 오른쪽에 위치 할 경우 벌---벌-----꿀통
벌 한마리를 왼쪽에 고정, 꿀통 제일 오른쪽에 고정 후
벌 한마리를 벌-꿀통 사이를 지나게 */
for(int i = 1;i<n-1;i++){
int sum_l = sum[n-1] - arr[0] - arr[i];
int sum_r = sum[n-1] - sum[i];
max_sum = max(max_sum,sum_l + sum_r);
}
/*꿀통이 벌 2마리보다 왼쪽에 위치 할 경우 꿀통 ----벌 ---벌
꿀통 제일 왼쪽 고정, 벌 한마리를 제일 오른쪽에 고정 후
벌 한마리를 벌 - 꿀통 사이 지나게 */
for(int i = 1;i<n-1;i++){
int sum_l = sum[i] - arr[i];
int sum_r = sum[n-1] - arr[n-1] - arr[i];
max_sum = max(max_sum,sum_l + sum_r);
}
cout << max_sum;
}
'알고리즘' 카테고리의 다른 글
플로이드-와샬 알고리즘(C++) (0) | 2022.06.16 |
---|---|
백준 6443 애너그램 C++ (next_permutation) (0) | 2022.06.15 |
알고리즘 13주차 격자상의 경로 10164 C++ (0) | 2022.06.13 |
백준 1331 나이트 투어 C++ (0) | 2022.06.09 |
백준 1303 전쟁 C++ (0) | 2022.06.08 |