Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- MySQL
- spring cloud
- Kotlin
- 백준 파이썬
- 백준 15685
- spring oauth
- 백준 19238
- JPA
- with recursive
- re.split
- Coroutine
- 파이썬
- sql 기술면접
- spring security
- 백준 16719
- 백준 17779
- 백준 16236
- 웹어플리케이션 서버
- JVM
- 백준 16235
- MSA
- 백준 17626
- java 기술면접
- java
- 프로그래머스
- Spring
- 백준
- Spring Boot
- 프로래머스
- springboot
Archives
- Today
- Total
시작이 반
[백준] 1912번(python 파이썬) 본문
SMALL
연속된 숫자를 몇개 선택해서 더했을때 가장 큰 합을 구하는 것이다.
이는 양수는 계속 더해주고 음수일때 선택을 해야한다. 연속해서 더할 것인지 더하지 않을 것인지 정해야한다.
만약 숫자가
6
-5 1 2 3 -4 5
이렇게 있다면
1 2 3 은 더해서 6을 만든다.
이때 연속된 수로 -4가 나오게 되는데 계속 더해줄 것인지 빼고 다음 숫자부터 다시 시작할 것인지...
그렇다면 어떻게 정할까?
음수를 더했을때 보다 해당 음수 보다 클 경우 더해주면 된다.
1 + 2 + 3 = 6
(6 + -4 = 2 ) > -4 이기 때문에 계속 더해준다.
이런식으로 하면
1 2 3 -4 5 를 선택했을때 제일 큰 수 7이 나온다.
만약 음수를 기준으로 더하고 말지를 정한다면 ( 처음에 생각한 방법)
1 2 3 를 선택한 6이 제일 큰 값이 나오기 때문에 잘못된 방법이다.
n = int(input())
s = list(map(int, input().split()))
dp = [0] * len(s)
for i in range(len(s)):
if i == 0:
dp[i] = s[i]
if s[i-1] >= 0:
dp[i] = s[i] + dp[i-1]
else:
if s[i] < s[i] + dp[i-1]:
dp[i] = s[i] + dp[i-1]
else:
dp[i] = s[i]
print(max(dp))
LIST
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 11047번 (python 파이썬) (0) | 2021.02.27 |
---|---|
[백준] 12865번(python 파이썬) (0) | 2021.02.26 |
[백준] 9251번(python 파이썬) (0) | 2021.02.26 |
[백준] 2565번(python 파이썬) (0) | 2021.02.25 |
[백준] 11053번(python 파이썬) (0) | 2021.02.24 |