#include <string>
#include <vector>
#include <iostream>
#include <cmath>
#include <map>
#include <algorithm>
#include <sstream>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int N,sum=0, in;
cin >> N;
vector<int> plus;
vector<int> minus;
for(int i=0;i<N;i++) {
cin >> in;
if(in > 0) plus.push_back(in);
else minus.push_back(in);
}
sort(plus.begin(),plus.end(),greater<int>());
sort(minus.begin(),minus.end(),less<int>());
int i=0;
if(!plus.empty()){
for(;i<plus.size()-1;i+=2){
if(plus[i] == 1 || plus[i+1] == 1) sum += plus[i] + plus[i+1];
else sum += plus[i]*plus[i+1];
}
if(i < plus.size()) sum+=plus[i];
}
int j=0;
if(!minus.empty()){
for(;j<minus.size()-1;j+=2)
sum += minus[j]*minus[j+1];
if(j < minus.size()) sum+=minus[j];
}
cout << sum;
return 0;
}
- 깨달음
1) 컨테이너 선언 후에 값을 추가하지 않고 v.size()하면 오류난다 ㅠㅠㅠ
2) 곱셈
/ 음수
이 두가지가 있을 때에는 반드시 0과 1처리에 대해 고민하자
- 로직
1) 수를 음수/양수로 분리해서 받는다
(0은 음수로넣어야함 --> 음수와 곱해서 없어질 수 있기 때문에!)
2) 양수는 내림차순 / 음수는 오름차순으로 정렬 (음수는 작은수의 곱이 더 크기 때문)
3) 양수처리를 할 때 2개의 수 중 하나라도 1이면 더하는게 이득임!