Baekjoon13398 - 연속합 2 (Python)
백준 사이트 13398 - 연속합 2 문제입니다.
이 글을 보시기 전에 문제를 풀기 위해 충분한 생각을 하셨나요? 답을 안 보고 푸는게 최대한 고민하는게 가장 중요하다고 생각합니다.!!
☑️ 1. 문제
https://www.acmicpc.net/problem/13398
☑️ 2. Input , Output
☑️ 3. 분류 및 난이도
코딩테스트 준비-기초 : 브루트포스 - 다이나믹프로그래밍 문제입니다.
☑️ 4. 생각한 것들
- 요소 하나를 삭제할 수 있기 때문에 삭제했을때 경우, 삭제를 하지 않았을때 경우를 생각해야합니다.
- 삭제 안 했을경우는 순차적으로 합한 경우 vs 현재 인덱스의 값을 비교해나가면서 해결하면 됩니다.
- 삭제의 경우는 딱 한 번만 삭제가 가능하므로, 전의 인덱스까지를 순차적으로 합한경우(삭제의 경우입니다.) vs 이미 삭제한 경우의 순차합을 비교해야합니다.
- 그래서 총 2개의 메모제이션 자료구조를 사용하였습니다.
5. code
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
from sys import stdin
def solution() -> int:
def init():
num = int(stdin.readline())
data_list = list(map(int, stdin.readline().split()))
return num, data_list
n, input_list = init()
dp = [0] * n
delete_dp = [0] * n
dp[0] = delete_dp[0] = input_list[0]
max_num = input_list[0]
for i in range(1, n):
# 삭제의 경우
delete_dp[i] = max(delete_dp[i - 1] + input_list[i], dp[i - 1])
# 순차합과 본인 인덱스 값을 비교
dp[i] = max(dp[i - 1] + input_list[i], input_list[i])
max_num = max(max_num, dp[i], delete_dp[i])
return max_num
result = solution()
print(result)
6. 후기
c++로 작성이 필요하거나 도움이 필요하시면 댓글을 작성해주세요.!! 기록용이라 설명이 자세하지 않습니다.
This post is licensed under CC BY 4.0 by the author.