반응형
연속합
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
1 초 (추가 시간 없음) | 128 MB | 122894 | 44941 | 31715 | 35.207% |
문제
n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.
예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.
입력
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
출력
첫째 줄에 답을 출력한다.
예제 입력 1
10
10 -4 3 1 5 6 -35 12 21 -1
예제 출력 1
33
예제 입력 2
10
2 1 -4 3 4 -4 6 5 -5 1
예제 출력 2
14
예제 입력 3
5
-1 -2 -3 -4 -5
예제 출력 3
-1
풀이
1)
n = int(input())
a = list(map(int,input().split()))
d = [0]*n
for i in range(n):
d[i] = a[i]
if i == 0:
continue
if d[i] < d[i-1] + a[i]:
d[i] = d[i-1] + a[i]
print(max(d))
- 입력받은
n
은 리스트a
의 길이를 나타냅니다.
- 리스트
a
는 입력받은 숫자들을 저장하는 리스트입니다.
- 리스트
d
는a
리스트의 각 원소를 누적하여 더한 부분합 중 가장 큰 값을 저장하는 리스트입니다. 따라서,d[i]
는a[0]
부터a[i]
까지의 부분합 중 가장 큰 값을 의미합니다.
for
문을 통해 리스트a
를 순회하며,d
리스트에 값을 저장합니다.
if
문을 통해d[i]
가 이전까지의 부분합과 현재 원소a[i]
를 더한 값보다 작을 경우,d[i]
를 이전까지의 부분합과 현재 원소a[i]
를 더한 값으로 업데이트합니다. 이는d[i]
가 이전까지의 부분합과 현재 원소a[i]
를 더한 값보다 작다면,d[i]
를 현재 원소a[i]
로 초기화하지 않고 이전까지의 부분합과 현재 원소a[i]
를 더한 값으로 업데이트해야하기 때문입니다.
for
문을 마친 후,d
리스트에서 가장 큰 값을 출력합니다. 이는a
리스트에서 부분합 중 가장 큰 값을 의미합니다.
Uploaded by N2T
반응형
'Algorithm' 카테고리의 다른 글
[백준 2225 파이썬/python] 합분해 (1) | 2023.04.19 |
---|---|
[백준 1699 파이썬/python] 제곱수의 합 (0) | 2023.04.18 |
[백준 14002 파이썬/python] 가장 긴 증가하는 부분 수열 4 (0) | 2023.04.18 |
[백준 11053 파이썬/python] 가장 긴 증가하는 부분 수열 (0) | 2023.04.18 |
[백준 2193 파이썬/python] 이친수 (1) | 2023.04.18 |