카테고리 없음

[백준 1912] 연속 합 - python (solved.ac - 실버 2)

조용장 2022. 1. 14. 11:54

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

 

1912번: 연속합

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

www.acmicpc.net

풀이

문제를 보았을때 알수있는 힌트

연속된 몇개의 수를 더해서 큰 합을 구하는 문제이다. 입력을 통해 n이 최대 10만인것을 보아 n^2은 하면 안될것으로보인다. 그렇다면 dp(다이나믹 프로그래밍)문제일 것이라고 생각을하고 접근하였다.

dp를 담을 리스트를 생성하고 임의의 수열에 처음부터 하나씩 비교하며 큰값을 dp에 작성하며 접근한다.

예제 문제를 통해 처음에 있는 10은 dp[0]에 10을 입력하고 이어서 -4를 계산하면 10-4=6과 -4중에 큰 6을 dp에 넣는다. 이것을 반복하며 풀면 10 6 9 10 15 22 -13 12 33 32 가 나오는데 이때 제일 큰 33을 출력하면 끝이 난다.

 

import sys
input= sys.stdin.readline

n = int(input())
node = list(map(int,input().split()))
dp=[0]*n
dp[0] = node[0]

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

print(max(dp))

https://github.com/dydwkd486/coding_test/blob/main/baekjoon/baekjoon1912.py

 

GitHub - dydwkd486/coding_test: 코딩테스트 공부한 내용 정리

코딩테스트 공부한 내용 정리. Contribute to dydwkd486/coding_test development by creating an account on GitHub.

github.com