티스토리 뷰
풀이
DP 문제이다. 입력 데이터를 처음부터 살펴보면서 선택의 최댓값을 찾을 것이다.
문제 조건에서 3번 연속으로 포도 잔을 선택할 수 없기 때문에 다음과 같은 경우를 생각해본다.
- 현재가 0번 연속, 즉 i-2, i-1번이 선택되었다
- 현재가 1번 연속, 즉 i-2, i 번이 선택되었다
- 현재가 2번 연속, 즉 i-1, i 번이 선택되었다
변수 설명
- data : i 번째 입력 값
- dp : i 번째 최댓값
Python3 Code
import sys
n = int(sys.stdin.readline())
data = [0] + [int(sys.stdin.readline()) for _ in range(n)] + [0]
dp = [0] * (n+2) # i번째 최댓값
dp[1], dp[2] = data[1], data[1] + data[2]
for i in range(3, n+1):
x = dp[i-1] # 연속 0
y = dp[i-2] + data[i] # 연속 1
z = dp[i-3]+ data[i-1] + data[i]# 연속 2
dp[i] = max(x, y, z)
print(dp[n])
'Computer Science > Algorithm' 카테고리의 다른 글
[BOJ] 11053 - 가장 긴 증가하는 부분 수열 (0) | 2020.06.16 |
---|---|
[BOJ] 2193 - 이친수 (0) | 2020.06.14 |
[BOJ] 1463 - 1로 만들기 (0) | 2020.06.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- tensorflow
- nlp 트렌드
- netron
- MIT
- 알고리즘 강의
- keras
- boto3
- stft
- RNN
- Introduction to Algorithm
- 모델 시각화
- aws cli
- wavenet
- Tensorflow2.0
- MFCC
- 6.006
- 시계열
- BOJ
- TF2.0
- 오디오 전처리
- nlp
- librosa
- AWS
- S3
- lambda
- 알고리즘
- 핵심어 검출
- 인공지능 스피커 호출
- LSTM
- nlg
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함