728x90
< 기존 풀이 >
for 문을 반복해서 모든 경우의 수를 구했고 당연히 시간 초과가 발생했다. dp 라는 다이나믹 프로그래밍을 활용하는 것은 알고는 있지만 생소해서 적용이 힘들었다.
< 해결 방법 >
dp 라는 리스트를 만들었고 그 리스트에 '현재 까지 연속 합' 이나 '현재 리스트의 값' 중 큰 값을 넣어 준 후 마지막에 리스트의 최댓값을 출력하는 방식을 이용했다. 처음에 볼 때는 무슨 말인지 몰랐지만 코드를 짜보닌 어느정도는 이해를 했다.
import sys
a = int(input())
b=list(map(int,sys.stdin.readline().rstrip().split(" ")))
dp = [0] * (a)
dp[0] = b[0]
for i in range(1,len(b)):
dp[i]=max(dp[i-1]+b[i],b[i])
print(max(dp)) 728x90
'🟢 알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글
| [파이썬] 백준 2156 포도주 시식 (0) | 2022.08.17 |
|---|---|
| [파이썬] 백준 1463 1로 만들기 (0) | 2022.08.17 |
| [파이썬] 백준 1018 체스판 다시 칠하기 (0) | 2022.08.05 |
| [파이썬] 백준 2477 참외밭 (0) | 2022.08.05 |
| [파이썬] 백준 1620 나는야 포켓몬 마스터 이다솜 (0) | 2022.08.04 |