티스토리 뷰

백준/실버

[백준 10211번] Maximum Subarray (C++)

게임개발기원 2023. 7. 5. 21:44

문제링크 : https://www.acmicpc.net/problem/10211

 

10211번: Maximum Subarray

크기 N인 정수형 배열 X가 있을 때, X의 부분 배열(X의 연속한 일부분) 중 각 원소의 합이 가장 큰 부분 배열을 찾는 Maximum subarray problem(최대 부분배열 문제)은 컴퓨터 과학에서 매우 잘 알려져 있

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;

int arr[1001];

int main()
{
    ios_base::sync_with_stdio(0); 
	cin.tie(0);
    
    int T, N;
    cin >> T;
    while(T--)
    {
        cin >> N;
        for(int i=0; i<N; i++)
        {
            cin >> arr[i];
        }

        int sum=0, maxV=-1001; 
        for(int i=0; i<N; i++)
        {
            for(int j=i; j<N; j++)
            {
                sum+=arr[j]; //누적합
                maxV=max(maxV, sum); //누적합 최대
            }
            sum=0;
        }
        cout << maxV <<"\n";
    }
    
    return 0;
}

누적합 문제이다.

여기서 주의해야할 것은 누적합에 음수가 들어간다는 점이다.

 

따라서 최대값을 저장할 변수를 -1001로 초기화해줬다. (주어지는 수가 절댓값이 1000보다 작은 정수이기 때문)

그리고 음수를 더하는 경우가 있으므로 최대값 갱신을 2번째 for문 안에서 해줘야 한다.

그러고 나서 누적합 부분을 초기화해주고 다시 탐색해준다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함