알고리즘
백준 21759 꿀따기 C++
긤효중
2022. 6. 13. 21:41
https://www.acmicpc.net/problem/21758
21758번: 꿀 따기
첫 번째 줄에 가능한 최대의 꿀의 양을 출력한다.
www.acmicpc.net
#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;
}