알고리즘/python
[python/파이썬] 백준 4097 수익
ㅌㅇㄴ
2022. 7. 22. 21:20
반응형
[문제 출처]
https://www.acmicpc.net/problem/4097
4097번: 수익
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 N이 주어져 있다. (1 ≤ N ≤ 250,000) 둘째 줄부터 N개의 줄에는 매일 매일의 수익 P가 주어진다. (-10,000 ≤ P ≤ 10
www.acmicpc.net
[소스 코드1]
dp[n]에 저장되는 값은 n일까지 돈을 벌었을 때 가장 수익이 높은 구간의 값이다.
따라서 dp[n]은 dp[n-1] + arr[n] 값과 arr[n] 값 중에 더 큰 값을 저장한다.
n번째도 이어가는 것이 더 수익이 높은지 아니면 n번째부터 다시 시작하는 게 더 높은지 비교한다.
import sys
input = sys.stdin.readline
while True:
n = int(input())
if n==0:
break
arr = []
for _ in range(n):
arr.append(int(input()))
dp = [0 for _ in range(n)]
dp[0] = arr[0]
for i in range(1,n):
dp[i] = max(dp[i-1] + arr[i], arr[i])
print(max(dp))
[소스 코드2]
거의 같은 코드이지만 arr 리스트랑 dp리스트 이렇게 2개를 쓰지 않고 한 개의 리스트로 구현한 코드이다.
좀 더 간단한 코드이다.
import sys
input = sys.stdin.readline
while True:
n = int(input())
if n==0:
break
arr = []
for _ in range(n):
arr.append(int(input()))
for i in range(1,n):
arr[i] = max(arr[i-1] + arr[i], arr[i])
print(max(arr))
반응형