-
[백준] 1912번 연속합Algorithm Study/Python 2021. 6. 28. 02:43
https://www.acmicpc.net/problem/1912
문제
n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.
예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.
입력
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
출력
첫째 줄에 답을 출력한다.
풀이
이 문제는 DP를 이용해서 구하는 것이 가장 보편적인 풀이이지만 더 쉽게 풀 수 있는 방법이 있어서 가지고 왔다.
위의 그림처럼 총합이 음수로 되는 경우에는 처음부터 새로 시작하는 것이
더 큰 숫자를 만들 수 있기 때문에 총 합을 0으로 초기화하고 새로 시작하면 된다.이렇게 구현하는 경우에는 단순합 연산만 이용하여 구할수 있게 된다.
전체 코드
import sys N = int(sys.stdin.readline().strip()) numbers = list(map(int, sys.stdin.readline().split())) total = 0 answer = numbers[0] for i in range(N): if answer < total + numbers[i]: answer = total + numbers[i] total += numbers[i] if total < 0: total = 0 print(answer)
'Algorithm Study > Python' 카테고리의 다른 글
[백준] 11497번 통나무 건너뛰기 (0) 2021.06.28 [백준] 17390번 이건 꼭 풀어야해! (0) 2021.06.28 [백준] 1600번 말이 되고픈 원숭이 (0) 2021.06.28 [백준] 1929번 소수 구하기 (0) 2021.06.28 [백준] 2579번 계단오르기 (0) 2021.06.28