미소를뿌리는감자의 코딩
[백준 2024/10/13] 1912번 연속합 본문
728x90
1. 문제
https://www.acmicpc.net/problem/1912
2. 접근 방법
dp 리스트를 만든 후, 해당 idx에서는 해당 idx에서 가장 큰 연속된 수를 포함하도록 코드를 작성하고자 하였다.
- 양수를 만나면, 무조건 포함하는 것이 이득이 된다.
- 음수를 만나면 더해보고, 0보다 작아진다면 연속된 합을 취소하고 다음 수 부터는 이전 dp[i-1]이 아닌 새로 값을 더하기를 시작하는 것이 좋음.
작성한 코드를 하나씩 보면서 더 알아보자.
for i in range(1, n+1, 1):
if dp[i-1] < 0:
dp[i] = nums[i]
continue
dp[i] = dp[i-1] + nums[i]
만약 연속된 수들의 합이 0보다 작다면, 새로 dp[i] = nums[i]로 시작한다.
그 외, 크다면 포함해서 더하는 것이 이득이므로, dp[i] = dp[i-1] + nums[i] 를 적어둔다.
3. 코드
def get_max_count(nums, n):
dp = [0] * (n+1)
for i in range(1, n+1, 1):
if dp[i-1] < 0:
dp[i] = nums[i]
continue
dp[i] = dp[i-1] + nums[i]
return max(dp[1:])
if __name__ == "__main__":
n = int(input())
nums = list(map(int, input().split()))
nums.insert(0, 0)
print(get_max_count(nums, n))
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준 2024/10/15] 1463번 1로 만들기 (1) | 2024.10.15 |
---|---|
[백준 2024/10/14] 1520번 내리막 길 (0) | 2024.10.14 |
[백준 2024/10/12] 154856번 퇴사 2 (0) | 2024.10.12 |
[백준 2024/10/11] 2193번 이친수 (0) | 2024.10.11 |
[백준 2024/10/10] 11727번 2xn 타일링 2 (0) | 2024.10.10 |