알고리즘
[C++] 백준 20300번 : 서강근육맨
88dldl
2024. 3. 14. 21:52
https://www.acmicpc.net/problem/20300
20300번: 서강근육맨
PT 첫째 날에 $1$과 $4$를 선택하고, 둘째 날에 $2$와 $3$을 선택하고, 마지막 날에 $5$를 선택하면 $M$은 $5$가 되며, 이때가 $M$이 최소일 때이다.
www.acmicpc.net
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
long health=-1;
vector<long> v;
void solve(){
int tmpn=n;
long tmpnum;
if(n%2==1){
tmpn=n-1;
}
for(int i=0;i<tmpn/2;i++){
tmpnum=v[i]+v[tmpn-i-1];
health=max(tmpnum,health);
} ㅁ
if(n%2==1){
health=max(v[n-1],health);
}
cout<<health;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++){
long tmp;
cin>>tmp;
v.push_back(tmp);
}
sort(v.begin(),v.end());
solve();
return 0;
}
sort 한후 solve()함수
[기구의 개수가 홀수일 경우 ]
1. 기구의 개수가 홀수개라면 제일 큰 근손실정도를 가지는 기구를 제외한 후,
2. - (제일작은 근손실을 가지는 기구 + 제일 큰 근손실정도를 가지는 기구)
- (2번째로 작은 근손실을 가지는 기구)+(2번째로 큰 근손실 정도를 가지는 기구)
- (...)....
를 각각 비교해주어 max값을 가지는 값을 구한다.
3. 2에서 구한 max값과 제일 큰 근손실정도를 가진 기구를 비교하여 max값을 찾아낸다.
[기구의 개수가 짝수일 경우 ]
1. 짝수개라면 위의 방법에서 2번만 진행한다.