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
- softeer풀이
- 백준파이썬
- 백준10844
- DomainAdaptation
- 나이순정렬 파이썬
- 쉬운계단수 파이썬
- 소프티어이미지프로세싱
- 우물안개구리 python
- 1로만들기 파이썬
- 12865python
- 12865파이썬
- 비밀메뉴파이썬
- 로드밸런서트래픽예측
- 소프티어파이썬
- 1로만들기 python
- LIS python
- softeer전광판
- 소프티어
- 11054 python
- 소프티어 풀이
- 전광판파이썬
- 우물안개구리 파이썬
- 로드밸런서트래픽예측 파이썬
- 10844 python
- knapsack해설
- 소프티어풀이
- 현대코테
- 백준 11053 파이썬
- softeer이미지프로세싱
- 파이썬10814
Archives
- Today
- Total
도비일기
[백준 단계별 풀이 - 동적계획법] #1912 연속합 본문
문제
n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.
예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.
입력
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
출력
첫째 줄에 답을 출력한다.
코드
N = int(input())
arr = list(map(int, input().split()))
ref = [0 for _ in range(N)]
ref[0] = arr[0]
result = ref[0]
for i in range(1, N):
ref[i] = max(ref[i-1] + arr[i], arr[i])
result = max(result, ref[i])
print(result)
노트
1. 연속되는 합의 많은 경우의 수에 대해서 전부 저장해놓으려고 생각해서 틀렸다.
모두 저장하려 하지 않고, 그냥 result 변수 값을 업데이트 하니까 해결!
2. result 값의 초기값을 두지 않아서 틀림
3. result 값의 초기값을 -1001로 둬서, arr의 첫 번재 원소는 고려하지 않아서 틀림
'코테준비 - Python > 백준풀이' 카테고리의 다른 글
| [백준 단계별 풀이 - BFS DFS] #1260 BFS와 DFS (0) | 2022.03.20 |
|---|---|
| [백준 단계별 풀이] #12015 가장 긴 증가하는 부분 수열 (0) | 2022.03.13 |
| [백준 단계별 풀이 - 동적계획법] #2565 전깃줄 (0) | 2022.03.13 |
| [백준 단계별 풀이 - 동적계획법] #11054 가장 긴 바이토닉 부분수열 (0) | 2022.03.11 |
| [백준 단계별 풀이 - 동적계획법] #11053 가장 긴 증가하는 부분 수열 (0) | 2022.03.08 |