연속합 실버2 (백준, DP)
2023. 1. 31. 12:22ㆍ코딩 테스트 준비
728x90
반응형
import sys
input = sys.stdin.readline
n = int(input())
arr = list(map(int, input().split()))
cnt = 0
for i in arr:
if i < 0:
cnt+=1
if cnt == n:
print(max(arr))
else:
for i in range(n-1):
if arr[i] + arr[i+1] > 0:
arr[i+1] = arr[i]+arr[i+1]
else:
arr[i+1] = max(arr[i]+arr[i+1], arr[i+1], 0
print(max(arr))
내가 풀이한 코드로 앞과 뒤를 더했을때 값이 -가 아니라면 해당 값을 넣고 -라면 0과 본인, 더한 값 중 가장 큰 값으로 초기화하여 나온 값 중 가장 큰 값을 출력해줬다. 모든 값이 -일 경우는 그냥 모든 배열 중 가장 큰 값을 출력했다. 하지만 이렇게 되면 불필요한 연산이 많은데 이를 해결한 코드는 다음과 같다.
n = int(input())
a = list(map(int, input().split()))
for i in range(1, n):
a[i] = max(a[i], a[i - 1] + a[i])
print(max(a))
내가 적은 코드를 간략화하면 이렇게 될 듯하다. 본인과 본인과 본인 전을 더했을때 큰 값으로 초기화하는 것만으로도 답이 나온다.
728x90
반응형
'코딩 테스트 준비' 카테고리의 다른 글
비밀번호 발음하기 실버5 (백준, 문자열) (0) | 2023.01.31 |
---|---|
0 만들기 골드5 (백준, 구현) (0) | 2023.01.31 |
해킹 골드4 (백준, 다익스트라) (0) | 2023.01.30 |
가희와 키워드 실버2 (백준, 문자열) (0) | 2023.01.30 |
동물원 실버1 (백준, DP) (0) | 2023.01.30 |