[C++] BOJ 27277번 : 장기자랑

ㅎㅎ·2023년 8월 24일
0

BOJ

목록 보기
40/65

BOJ 27277번 : 장기자랑

문제


문제 풀이

(가장 작은 값, 가장 큰 값)의 쌍을 만든 후 first 값이 가장 큰 것부터 배치한 순서가 최댓값을 구할 수 있는 순서이다.

홀수인 경우에는 똑같이 쌍을 만들다 남은 숫자를 가장 앞에 둔다.

  1. 벡터에 값을 받아 오름차순으로 정렬한다.
  2. 쌍에서 앞은 무조건 0이 됨으로, 가장 뒤의 수(큰 값) - 가장 앞의 수(작은 값)을 구해 답에 누적시킨다.
  3. 가장 앞의 수를 더한 값이 답이 된다.
#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;
}

이걸 어떻게 생각해내는거야

profile
Backend

0개의 댓글