Baekjoon

Baekjoon 1744번 수 묶기

ppwag 2021. 4. 18. 14:38

문제

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

걸린 시간

01 : 21 : 51 실패

풀이

C++

#include <bits/stdc++.h>
#define fastio ios::sync_with_stdio(0), cin.tie(0)
#define all(c) c.begin(), c.end()
#define INF 1e9
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

bool compare(int a, int b){
    return a > b;
}

int main(){
    fastio;
    int N;
    cin >> N;
    vector<int> p, n, z, o;
    int t;
    for(int i = 0; i < N; i++){
        cin >> t;
        if(t == 0) z.push_back(t);
        else if(t == 1) o.push_back(t);
        else if(t > 0) p.push_back(t);
        else if(t < 0) n.push_back(t);
    }
    sort(all(p), compare);
    sort(all(n));
    int ans = 0;
    for(int i = 0; i < (int)n.size()-1; i+=2){
        ans += n[i]*n[i+1];
    }
    if(n.size()%2 == 1) if(z.size() == 0) ans += n[n.size()-1];
    for(int i = 0; i < (int)p.size()-1; i+=2){
        ans += p[i]*p[i+1];
    }
    if(p.size()%2 == 1) ans += p[p.size()-1];
    for(int i = 0; i < o.size(); i++){
        ans += o[i];
    }
    cout << ans << "\n";
    return 0;
}

1과 다른 양수는 묶지 않고 따로 더하는것이 더 크다는 것을 생각하지 못해서 틀린 문제.

틀리지 않은 음수에서의 처리에 문제가 있는 줄 알고 수정하다 풀이가 오히려 거꾸로 돌아갔다.

새롭게 알게 된 점은 vector 의 size() 메소드는 반환값이 unsigned int 형으로 타입캐스팅 없이 빼기 연산을 진행하면 underflow 가 일어난다.

'Baekjoon' 카테고리의 다른 글

Baekjoon 1629번 곱셈  (0) 2021.04.25
Baekjoon 19948번 음유시인 영재  (0) 2021.04.18
Baekjoon 9663번 N-Queen  (0) 2021.04.14
Baekjoon 10610번 30  (0) 2021.03.21
Baekjoon 8682번 Happy monkey  (0) 2021.03.21

댓글