고짬기록

SWEA 5642 [Professional] 합 Python 본문

알고리즘 공부 ⌨/SWEA 03

SWEA 5642 [Professional] 합 Python

고짬이 2021. 5. 7. 00:14

문제 주소 및 출처 ❕

swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AWXQm2SqdxkDFAUo&categoryId=AWXQm2SqdxkDFAUo&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=PYTHON&select-1=3&pageSize=10&pageIndex=10

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

문제 : D3 5642 [Professional] 합

 

언어 : Python

 

 

문제 ❓❗


※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다. 



N개의 정수가 입력으로 주어진다.

이때 연속하여 몇 개의 정수를 골라 합을 구할 수 있다.

예를 들어, 1 3 -8 18 -8 이 있다고 하자.

그럼 2번부터 4번까지의 수를 골라 합을 구하면, 3+(-8)+18 = 13이다. 

이렇게 연속해서 정수를 골라 합을 구할 때, 그 합의 최대가 몇인지 구하는 프로그램을 작성하세요.



[입력]

첫 줄에 테스트케이스의 개수 T가 주어진다. (1 ≤ T ≤ 20)

각 테스트 케이스 첫째 줄에 숫자 N이 주어진다. (3 ≤ N ≤ 100,000)

둘째 줄에는 절대값이 1000이하의 정수 N개가 공백을 사이에 두고 입력된다.


[출력]

각 테스트케이스마다 한 줄에 걸쳐, 테스트케이스 수 “#(TC) “를 출력하고, 연속된 정수의 합의 최대값을 출력하시오.

 

 

💬 나의 코드

😭 1차 코드 -> runtime error

T = int(input())
for TC in range(1, T+1):
    N = int(input())
    Arr = list(map(int, input().split()))
    # 최대값 초기화
    maxV = Arr[0]
    # 시작 인덱스 탐색
    for i in range(N):
        subV = 0
        # 마지막 인덱스 탐색
        for j in range(i, N):
            subV += Arr[j]
            # 최대값 탐색
            if maxV < subV:
                maxV = subV
    print("#{} {}".format(TC, maxV))

 

😍 PASS 코드

T = int(input())
for TC in range(1, T+1):
    N = int(input())
    Arr = list(map(int, input().split()))
    # 최대값 초기화
    maxV = -1000000
    # 합 초기화
    sumV = 0
    # 시작 인덱스 탐색
    for i in range(N):
        # 처음부터 더하기
        sumV += Arr[i]
        # 최대값 갱신
        if sumV > maxV:
            maxV = sumV
        # 현재까지의 합이 음수이면 버리기
        if sumV < 0:
            sumV = 0
    print("#{} {}".format(TC, maxV))
Comments