STUDY/매일프로그래밍

매일프로그래밍 코딩 테스트#1

갓갱 2018. 4. 6. 22:46
반응형

1.문제

정수 배열(int array)가 주어지면 가장 큰 이어지는 원소들의 합을 구하시오. 단, 시간복잡도는 O(n).

예제}

Input: [-1, 3, -1, 5]

Output: 7 // 3 + (-1) + 5


Input: [-5, -3, -1]

Output: -1 // -1


Input: [2, 4, -2, -3, 8]

Output: 9 // 2 + 4 + (-2) + (-3) + 8


2.풀이

#매일프로그래밍 코딩 테스트 #1
# 정수 배열(int array)가 주어지면 가장 큰 이어지는 원소들의 합을 구하시오. 단, 시간복잡도는 O(n).
def sumDivisor(arr):
    maxSum = arr[0]
    currentSum = arr[0]
    for i in range(1,len(arr)):
        currentSum = max(currentSum + arr[i], arr[i])
        maxSum = max(currentSum, maxSum)
        print("maxSum의 변화 :%d" % maxSum)
        print("currentSum 변화 :%d" % currentSum)
    return maxSum

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(sumDivisor([-1,3,-1,5]))
print(sumDivisor([-5, -3, -1]))
print(sumDivisor([2, 4, -2, -3, -5]))

3.discussion

처음에는 currentSum 변수 하나로 문제를 해결할 수 있을 줄 알았다. 그러나 currentSum 값이 작아질 수 있는 경우가 발생하기때문에(이후에 오는 값이 음수이고 합이 음수가 될 경우, 테스트3번경우) currentSum의 최대값을 저장하는 MaxSum변수가 필요하다.

반응형