(가장 작은 값, 가장 큰 값)의 쌍을 만든 후 first 값이 가장 큰 것부터 배치한 순서가 최댓값을 구할 수 있는 순서이다.
홀수인 경우에는 똑같이 쌍을 만들다 남은 숫자를 가장 앞에 둔다.
- 벡터에 값을 받아 오름차순으로 정렬한다.
- 쌍에서 앞은 무조건 0이 됨으로, 가장 뒤의 수(큰 값) - 가장 앞의 수(작은 값)을 구해 답에 누적시킨다.
- 가장 앞의 수를 더한 값이 답이 된다.
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
using namespace std;
vector<int> v;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n, num, a, b;
long long ans = 0;
cin >> n;
if (n == 1) { // 1명이면 바로 출력 후 종료
cin >> num;
cout << num;
return 0;
}
for (int i = 0; i < n; i++) {
cin >> num;
v.push_back(num);
}
sort(v.begin(), v.end()); // 오름차순 정렬
for (int i = 0; i < n / 2; i++) {
ans += (v[n - 1 - i] - v[i]);
}
if (n % 2) { ans += v[n / 2]; } // 첫번째 숫자 더하기
else { ans += v[n / 2 - 1]; }
cout << ans;
return 0;
}
이걸 어떻게 생각해내는거야