본문 바로가기
백준 문제 풀이 & C++ 공부

백준 1912 C++

by daisy0461 2025. 1. 28.

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

좀 다양하게 생각을 했었다.

뒤에서부터 더해서 부분 합을 다 구해놓으면 어떨까?

-, +가 연속해서 들어온다면 연속해서 더해서 vector에 넣은 다음에 하는건?

 

마지막이 코드로 작성한 방법인데

처음부터 더하다가 -값이 나온다면 이미 그 후에 더하는 값은 최대값이 될 수 없다는 생각이었다.

그리고 더하다가 -가 되기 전에 최대값이 있으면 최대값으로 설정했다.

#include <bits/stdc++.h>

using namespace std;

int n;		//총 배열 길이
int maxResult = -987654321;
bool bIsPossitive = false;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	cin >> n;

	int temp;
	int sum = 0;
	for (int i = 0; i < n; i++) {
		cin >> temp;
		if (temp > 0) bIsPossitive = true;		//최소한 하나의 양수가 들어왔다.

		if (temp > maxResult) {		//단일 값이 가장 크다면 -> 예를 들어서 모든 값이 음수
			maxResult = temp;
		}

		sum += temp;
		if (bIsPossitive && sum > maxResult) {		//최소한 하나의 양수가 있어야하는 이유 -> 밑에서 sum을 0으로 초기화하기 때문에 모든 값이 양수일 때 maxResult를 0으로 초기화하면 안된다.
			maxResult = sum;
		}

		if (sum < 0) {		//지금까지 더 한 결과가 음수이다. 즉, 이후에 그냥 더 하는 값이 더 크다.
			sum = 0;		
		}
	}

	if (bIsPossitive && sum > maxResult) {
		maxResult = sum;
	}

	cout << maxResult;
}

'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글

백준 17822 C++  (0) 2025.01.30
백준 15683 C++  (0) 2025.01.30
백준 15685 C++  (0) 2024.12.29
백준 17143 C++  (0) 2024.11.30
백준 14888 C++  (0) 2024.11.29