백준 1912번 연속합

박슬빈·2021년 9월 2일
0

문제

입력 , 출력

정답

import sys

input = sys.stdin.readline

n = int(input())
arr = list(map(int, input().split()))
res = [[] for i in range(n)]
if n == 1:
    print(arr[0])
elif n == 2:
    print(max(arr[1], arr[0], arr[0] + arr[1]))
elif n >= 3:
    res[0] = arr[0]
    res[1] = max(res[0] + arr[1], arr[1])
    res[2] = max(res[1] + arr[2], arr[2], arr[1] + arr[2])
    for i in range(3, n):
        res[i] = max(res[i - 1] + arr[i], arr[i], arr[i - 1] + arr[i])
    print(max(res))

설명

res 는 연속으로 선택했을경우 가장 큰 값
arr 는 입력받은 값
n의 값이 1보다 같거나 클 경우라서
n = 1 , n = 2 예외로 처리해두고
n 이 3보다 같거나 클 경우
경우의 수 3가지
res[i-1] + arr[i] 를 선택했을때
arr[i] 만 선택했을때
arr[i-1] + arr[i] 를 선택했을때
3가지 중에 가장 큰 값을 골라서 res에 넣고
res배열 안에서 가장 큰 값을 선택함

후기

max(res) 를 사용하지 않고 res[i]에 값을 넣을때마다
비교해서 넣어도 가능했지만 귀찮아서 max함수를 사용해버림...

profile
이것저것합니다

0개의 댓글