와이유스토리

[정렬] 백준 1744 수 묶기 C++ 본문

코딩테스트/구현|기타

[정렬] 백준 1744 수 묶기 C++

유(YOO) 2020. 12. 25. 20:14

 

https://www.acmicpc.net/problem/1744

 

1744번: 수 묶기

길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에

www.acmicpc.net

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

vector<int> num;
int result, sum = 0;

void cal() {
    int a=0, b=0, c=0;
    sort(num.begin(), num.end());
    for (int i = num.size() - 1; i > 0; i -= 2)
    {
        a = num[i];
        b = num[i - 1];
        if ((a > 1) && (b > 1))
        {
            c = sum - a - b + a * b;
            if (c > sum)
            {
                sum = c;
            }
        }
        else {break;}
    }
    for (int i = 0; i < num.size()-1; i += 2)
    {
        a = num[i];
        b = num[i + 1];
        if ((a <= 0) && (b <= 0))
        {
            c = sum - a - b + a * b;
            if (c > sum)
            {
                sum = c;
            }
        }
        else {break;}
    }
    result = sum;
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    int n, temp;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> temp;
        num.push_back(temp);
        sum += temp;
    }
    cal();
    cout << result;
    return 0;
}
Comments