본문 바로가기
Study/Coding Test

[백준] 1912 - 연속합 Python

by 들숨날숨흡 2023. 10. 9.
728x90

https://www.acmicpc.net/problem/1912

 

1912번: 연속합

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

(1) 첫번째 코드 - 메모리 초과

import sys

input = sys.stdin.readline

N = int(input())
num = list(map(int, input().split(" ")))
M = len(num)
dp = [[-1000] * (M) for _ in range(M)]
answer = -1000

# print(num)

for i in range(M):
    for j in range(M):
        if i == j:
            dp[i][j] = num[j]
        elif i > j:
            continue
        else:
            dp[i][j] = dp[i][j - 1] + num[j]

for i in range(M):
    answer = max(answer, max(dp[i]))

print(answer)

이차원 배열로 풀었는데, 메모리 초과가 두번이나 나서 일차원 배열을 사용해야함을 깨달았다. 

 

(2) 두번째 코드 - 성공

import sys

input = sys.stdin.readline

N = int(input())
num = list(map(int, input().split(" ")))
M = len(num)
dp = [-1000] * (M)

dp[0] = num[0]

for i in range(1, M):
    dp[i] = max(dp[i - 1] + num[i], num[i])

print(max(dp))

728x90

'Study > Coding Test' 카테고리의 다른 글

[백준] 2156 - 포도주 시식 Python  (0) 2023.10.10
[백준] 1406 - 에디터 Python  (0) 2023.10.10
[백준] 7576 - 토마토 Python  (1) 2023.10.09
[백준] 10773 - 제로 Python  (0) 2023.10.09
[백준] 2346 - 풍선 터뜨리기 Python  (0) 2023.10.09