10211번: Maximum Subarray
크기 N인 정수형 배열 X가 있을 때, X의 부분 배열(X의 연속한 일부분) 중 각 원소의 합이 가장 큰 부분 배열을 찾는 Maximum subarray problem(최대 부분배열 문제)은 컴퓨터 과학에서 매우 잘 알려져 있
www.acmicpc.net
코드
for _ in range(int(input())):
n = int(input())
x = list(map(int, input().split()))
# 누적합
preSum = [0]
for i in range(n):
preSum.append(preSum[-1]+x[i])
# 브루트포스
ans = -int(1e9)
for l in range(n):
for r in range(l+1, n+1):
if preSum[r]-preSum[l] > ans:
ans = preSum[r]-preSum[l]
print(ans)
1. 배열 X의 누적합 preSum을 구한다.
2. 이 누적합을 이용하여 X의 원소들의 부분 배열 중 합이 가장 큰 값을 구하면 된다. 부분 배열의 합은 만약 x[a]에서 x[b]까지의 합을 구한다면 preSum[b+1]-preSum[a]이다. (preSum의 0번 요소는 0이므로 b에 1을 더하면 되는 것)
'문제풀이 > 누적합' 카테고리의 다른 글
[Python/파이썬] 백준 20116번 상자의 균형 (0) | 2024.05.20 |
---|---|
[Python/파이썬] 백준 2876번 그래픽스 퀴즈 (0) | 2024.04.30 |
[Python/파이썬] 백준 20002번 사과나무 (0) | 2024.02.23 |
[Python/파이썬] 백준 2900번 프로그램 (0) | 2024.01.18 |
[Python/파이썬] 백준 3673번 나눌 수 있는 부분 수열 (0) | 2024.01.17 |
10211번: Maximum Subarray
크기 N인 정수형 배열 X가 있을 때, X의 부분 배열(X의 연속한 일부분) 중 각 원소의 합이 가장 큰 부분 배열을 찾는 Maximum subarray problem(최대 부분배열 문제)은 컴퓨터 과학에서 매우 잘 알려져 있
www.acmicpc.net
코드
for _ in range(int(input())): n = int(input()) x = list(map(int, input().split())) # 누적합 preSum = [0] for i in range(n): preSum.append(preSum[-1]+x[i]) # 브루트포스 ans = -int(1e9) for l in range(n): for r in range(l+1, n+1): if preSum[r]-preSum[l] > ans: ans = preSum[r]-preSum[l] print(ans)
1. 배열 X의 누적합 preSum을 구한다.
2. 이 누적합을 이용하여 X의 원소들의 부분 배열 중 합이 가장 큰 값을 구하면 된다. 부분 배열의 합은 만약 x[a]에서 x[b]까지의 합을 구한다면 preSum[b+1]-preSum[a]이다. (preSum의 0번 요소는 0이므로 b에 1을 더하면 되는 것)
'문제풀이 > 누적합' 카테고리의 다른 글
[Python/파이썬] 백준 20116번 상자의 균형 (0) | 2024.05.20 |
---|---|
[Python/파이썬] 백준 2876번 그래픽스 퀴즈 (0) | 2024.04.30 |
[Python/파이썬] 백준 20002번 사과나무 (0) | 2024.02.23 |
[Python/파이썬] 백준 2900번 프로그램 (0) | 2024.01.18 |
[Python/파이썬] 백준 3673번 나눌 수 있는 부분 수열 (0) | 2024.01.17 |