반응형

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

 

1247번: 부호

총 3개의 테스트 셋이 주어진다. 각 테스트 셋의 첫째 줄에는 N(1 ≤ N ≤ 100,000)이 주어지고, 둘째 줄부터 N개의 줄에 걸쳐 각 정수가 주어진다. 주어지는 정수의 절댓값은 9223372036854775807보다 작거

www.acmicpc.net

 

입력된 수가 양수이고, 입력된 양수를 더하기 전의 수도 양수인데, 더하고 난 후의 수가 음수가 된다면 오버플로가 발생한 것입니다.

입력된 수가 음수이고, 입력된 음수를 더하기 전의 수도 음수인데, 더하고 난 후의 수가 양수가 된다면 언더플로가 발생한 것입니다.

오버플로가 난 횟수와 언더플로가 난 횟수를 기억해줍니다.

(오버플로 횟수 - 언더플로 횟수) == 0 이라면, 현재 저장된 합으로 판별해줍니다.

그게 아니라면, 오버플로 횟수가 더 많으면 양수, 언더플로 횟수가 더 많으면 음수가 됩니다.

 

#include <iostream>
using namespace std;

typedef long long int ll;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    for (int i = 0; i < 3; i++) {
        ll s = 0, a;
        int n, cnt = 0;
        cin >> n;
        while (n--) {
            cin >> a;
            ll prv = s;
            s += a;
            if (a > 0 && prv > 0 && s < 0) cnt++;
            if (a < 0 && prv < 0 && s > 0) cnt--;
        }
        if (cnt == 0) {
            if (s == 0) cout << 0 << '\n';
            else cout << (s > 0 ? '+' : '-') << '\n';
        }
        else {
            cout << (cnt > 0 ? '+' : '-') << '\n';
        }
    }
}
반응형

'Algorithm' 카테고리의 다른 글

백준 1550 : 16진수  (0) 2021.11.20
백준 21869 : Maximum Bishop  (0) 2021.11.20
백준 1373 : 2진수 8진수  (0) 2021.11.20
백준 1212 : 8진수 2진수  (0) 2021.11.20
백준 10798 : 세로읽기  (0) 2021.11.20

+ Recent posts