알고리즘 공부
백준 서강근육맨
컴퓨터과학
2023. 7. 18. 22:47
https://www.acmicpc.net/problem/20300
20300번: 서강근육맨
PT 첫째 날에 $1$과 $4$를 선택하고, 둘째 날에 $2$와 $3$을 선택하고, 마지막 날에 $5$를 선택하면 $M$은 $5$가 되며, 이때가 $M$이 최소일 때이다.
www.acmicpc.net
합 사이즈 잘볼것 int형으로 계산해서 계속 잘못됫다고 떳네요..
long형으로 받아서 합친값을 해결해줘야합니다.
/**/
#include <iostream>
#include <vector>
#include <queue>
#include<string>
#include<algorithm>
#include<cmath>
#include<unordered_map>
#include<map>
using namespace std;
int main() {
int n;
cin >> n;
vector<long>v;
for (int i = 0; i < n; i++) {
long tmp;
cin >> tmp;
v.push_back(tmp);
}
sort(v.begin(), v.end(),greater<>());
long max = 0;
if (v.size() % 2 == 0) {
for (int i = 0; i < n/2 ; i++) {
long sum = v[i] + v[n-1-i];
if (max <sum) {
max = sum;
}
}
}
else {
long mMx = 0;
for (int i = 0; i < n/2; i++) {
if (i != n - 1 - i) {
long sum = v[i] + v[n - 1 - i];
//cout << sum << ",";
if (mMx < sum) {
mMx = sum;
}
}
}
long nMx = 0;
for (int i = 0; i < n/2; i++) {
long sum = v[i+1] + v[n - 1 - i];
//cout << sum << ",";
if (nMx < sum) {
nMx = sum;
}
}
if (mMx > nMx) {
max = nMx;
}
else {
max = mMx;
}
}
cout << max;
return 0;
}