728x90
문제 1247번
https://www.acmicpc.net/problem/1247
입력된 수가 양수이고 입력된 양수를 더하기 전도 양수인데, 더하고 난 후에 음수 => 오버플로우 발생
입력된 수 음수이고 입력된 음수를 더하기 전의 수도 음수인데, 더하고 난 후의 수가 양수 => 언더플로우 발생
오버플로우가 발생한 횟수에서 언더플로우가 발생한 횟수를 뺐을 때 0이라면 저장된 합으로 판단
아니라면 오버플로우(더 많으면 양수)와 언더플로우(더 많으면 음수) 횟수로 판단
#include <iostream>
using namespace std;
int main() {
int n;
for (int i = 0; i < 3; i++) {
long long sum = 0, cnt = 0;
n = 0;
cin >> n;
for (int j = 0; j < n; j++) {
long long a;
long long pre = sum;
cin >> a;
sum += a;
if (a > 0 && pre > 0 && sum < 0) {
cnt++;
}
if (a < 0 && pre < 0 && sum > 0) {
cnt--;
}
}
if (cnt == 0) {
if (sum == 0) {
cout << 0 << '\n';
}
else {
cout << (sum > 0 ? '+' : '-') << '\n';
}
}
else {
cout << (cnt > 0 ? '+' : '-') << '\n';
}
}
return 0;
}

이번 문제는 좀 생소해서 다른 풀이로 공부해봤다. 나중에 다시 한번 더 풀어봐야지...
728x90
'백준 > C++' 카테고리의 다른 글
[C++] 백준 1676번 - 팩토리얼 0의 개수 (1) | 2024.07.23 |
---|---|
[C++] 백준 2163번 - 초콜릿 자르기 (1) | 2024.07.22 |
[C++] 백준 11659번 - 구간 합 구하기 4 (0) | 2024.07.19 |
[C++] 백준 32025번 - 체육은 수학과목 입니다 (0) | 2024.07.18 |
[C++] 백준 1075번 - 나누기 (0) | 2024.07.18 |