728x90
출처
https://www.acmicpc.net/problem/1744
내 풀이
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> plus_numbers;
vector<int> minus_numbers;
int N = 0;
int numbers = 0;
int result = 0;
int main()
{
cin >> N;
//음수는 음수끼리, 양수는 양수끼리 분리 1은 그냥 더해줌
for (int i = 0; i < N; i++)
{
cin >> numbers;
if (numbers <= 0)
{
minus_numbers.push_back(numbers);
}
else if (numbers > 1)
{
plus_numbers.push_back(numbers);
}
else if (numbers == 1)
{
result += numbers;
}
}
sort(plus_numbers.begin(), plus_numbers.end(), greater<int>());
sort(minus_numbers.begin(), minus_numbers.end());
//만일 짝수가 아니라면 맨 끝값은 더해줌 (어차피 곱할 수 없으니)
if (plus_numbers.size() % 2 != 0) result += plus_numbers[plus_numbers.size() - 1];
if (minus_numbers.size() % 2 != 0) result += minus_numbers[minus_numbers.size() - 1];
int first = 0;
int second = 0;
for (int i = 0; i < plus_numbers.size(); i++)
{
if (!first)
{
first = plus_numbers[i];
}
else if (!second)
{
second = plus_numbers[i];
result += first * second;
first = 0, second = 0;
}
}
//다시 초기화
first = 0;
second = 0;
for (int i = 0; i < minus_numbers.size(); i++)
{
if (!first)
{
first = minus_numbers[i];
}
else if (!second)
{
second = minus_numbers[i];
result += first * second;
first = 0, second = 0;
}
}
cout << result;
}
해설
일단 입력받는 숫자 중 양수 음수를 나눠서 각 벡터에 넣어주었다. 그리고 1같은 경우는 더하는게 더 큰수가 나오므로 더해주었다. 그리고 양수와 음수로 나눈 벡터를 정렬 후 양값을 곱해서 결과값에 더해주었다. 벡터가 홀수일 경우 가장 작은 마지막 값은 그 전에 더해주었다.
1. 마이너스일 경우 마이너스끼리 곱하면 양수가 된다.
2. 1일경우 그냥 더해주는게 더 크다.
3. 1 이상인 경우 곱해주는게 좋다.
새로 안 것
화이팅