본문 바로가기

백준/C++

[C++] 백준 1247번 - 부호

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