본문 바로가기
PS 문제 풀이/SWEA

[SWEA] 5642 합

by 까망 하르방 2021. 2. 24.
반응형

출처: SWEA

 Input 

1

5

1 3 -8 18 -8

 

 Output 

#1 18

 

모든 원소가 음수인 경우 주의해야 한다.

 Input 

1

5

-5 -4 -3 -2 -1

 

 Output 

#1 -1

 

※ 유사문제 풀이:  [BOJ] 1912 연속합 

 

[BOJ] 백준 1912 연속합

출처:  https://www.acmicpc.net/problem/1912  Input 10 10 -4 3 1 5 6 -35 12 21 -1  Output 3 배열의 연속된 부분합을 구하는 문제입니다. ① 중첩 for문을 이용하면 시간초과. ② 모든 원소가 음수일 때,..

zoosso.tistory.com


#include <iostream>
using namespace std;
int arr[100000];
#define MIN -1001
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
 
 
    int testCase; cin >> testCase;
    for (int tc = 1; tc <= testCase; ++tc) {
        int N; cin >> N;
 
 
        int answer = MIN;
        for(int i=0; i<N; ++i){
            cin >> arr[i];
            // 원소 중 최대값 찾기
            answer = answer < arr[i] ? arr[i] : answer;
        }
        // 모든 원소가 음수인 경우
        // 원소 1개가 부분합의 최대값에 해당
        if(answer <= 0){
            printf("#%d %d\n", tc, answer);
            continue;
        }
 
 
        // 원소 중 양수가 있는 경우
        int partialSum = 0;
        for(int i=0; i<N; ++i){
            partialSum += arr[i];
            // 부분합이 음수가 된다면 0으로 처리
            if(partialSum < 0) partialSum = 0;
            // 기존 최대값과 비교
            answer = answer < partialSum ? partialSum : answer;
        }
            
        // 정답 출력
        printf("#%d %d\n", tc, answer);
    }
}

 

반응형

'PS 문제 풀이 > SWEA' 카테고리의 다른 글

[SWEA] 5684 운동  (0) 2021.02.24
[SWEA] 8825 홀수 중간값 피라미드2  (0) 2021.02.24
[SWEA] 8016 홀수 피라미드  (0) 2021.02.24
[SWEA] 8822 홀수 중간값 피라미드 1  (0) 2021.02.24
[SWEA] 9317 석찬이의 받아쓰기  (0) 2021.02.24

댓글