//1744. 수 묶기
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n;
int answer;
int cnt_minus;
int cnt_plus;
int plus_index;
bool zero;// 0 존재하면 true, 존재안하면 false
int main(){
cin>>n;
vector<int> v(n);
for(int i=0; i<n; i++){ //양수,음수 갯수 카운트
cin>>v[i];
if(v[i]>0)
cnt_plus++;
if(v[i]<0)
cnt_minus++;
if(v[i]==0)
zero=true;
}
sort(v.begin(),v.end()); //오른차순 정렬
for(int i=0; i<n; i++){
if(v[i]>0){ //plus_index: 양수의 시작 인덱스
plus_index=i;
break;
}
}
if(cnt_plus==0){ //양수가 없으면
if(zero==true){//0이 있으면
plus_index=n-1;
}else{ //0이 없으면
plus_index=n;
}
}
for(int i=plus_index; i<n; i++){ //양수 살펴보기
if(cnt_plus%2==1){//양수가 홀수개면, 처음양수그냥 더하고 나머지는 두개씩 곱해서 answer에 더하기
if(i==plus_index)
answer+=v[i];
else{
if(i+1<n){
if(v[i]*v[i+1]>v[i]+v[i+1]) // 예제5 같은 경우있을수있으니, 곱해서 더한것과 각각 더한것중 더 큰것 확인
answer+=v[i]*v[i+1];
else
answer+=(v[i]+v[i+1]);
i++; //두 수 확인했으니까 i++ 해주어야함.
}
}
}else{// 양수가 짝수개면 두개씩 곱해서 answer에 더하기
if(i+1<n){
if(v[i]*v[i+1]>v[i]+v[i+1])
answer+=v[i]*v[i+1];
else
answer+=(v[i]+v[i+1]);
i++;
}
}
}
for(int i=0; i<plus_index; i++){ //음수 살펴보기
// 음수가 홀수개던 짝수개던 두개씩 곱해서 answer에 더하면 되고, 홀수일경우 마지막 하나는 따로 answre에 더하면 됨
if(i+1<plus_index){
answer+=v[i]*v[i+1]; // 음수경우는 무조건 곱해서 더하는게 최댓값 만드는 방법임.
i++;
}else{
answer+=v[i]; //홀수일경우 마지막 남은 음수 따로 더해주는 식
}
}
cout<<answer<<"\n";
}
// Authored by : heheHwang
// Co-authored by : BaaaaaaaaaaarkingDog
// http://boj.kr/4370940d344846289225c83a8c8b7889
#include <bits/stdc++.h>
using namespace std;
long long ans;
void seqSum(vector<int> v) {
while (1 < v.size()) {
ans += *(v.end() - 1) * *(v.end() - 2);
v.pop_back();
v.pop_back();
}
if (v.size())
ans += v[0];
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
vector<int> seqP, seqN;
int N, t;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> t;
if (t == 1) ans++;
else if (0 < t)
seqP.push_back(t);
else
seqN.push_back(t);
}
sort(seqP.begin(), seqP.end());
sort(seqN.begin(), seqN.end(), greater<>());
seqSum(seqP);
seqSum(seqN);
cout << ans;
}
참고 - https://github.com/encrypted-def/basic-algo-lecture/blob/master/0x11/solutions/1744.cpp