일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 파이썬
- dfs
- 카카오
- 정렬
- KAKAO BLIND RECRUITMENT
- 백준
- 위클리 챌린지
- lambda
- heapq
- Set
- BFS
- 다익스트라
- Zip
- 정규식
- 재귀함수
- Combinations
- 자바
- 수학
- 이분탐색
- DateTime
- python
- backjoon
- java
- 추석맞이 코딩챌린지
- 그리디
- Re
- 프로그래머스
- 동적 계획법
- programmers
- divmod
Archives
- Today
- Total
상상쓰
[백준] 포도주 시식 본문
https://www.acmicpc.net/problem/2156
2156번: 포도주 시식
효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규
www.acmicpc.net
동적 계획알고리즘으로 조건에서 연속적으로 놓여있는 3잔을 모두 마실 수 없으므로 2잔을 연속으로 마시는 경우는 wine[i][0] 에 담았고 그렇지 않은 경우 중 최댓값을 M 으로 두어 wine[i][1] (= wine[i][1] + M) 에 담았다.
최종적으로 wine 에 들어있는 값 중 최댓값을 반환한다.
import sys
N = int(sys.stdin.readline())
wine = []
M = 0
answer = 0
for i in range(N):
wine.append([0, int(sys.stdin.readline())])
if N == 1:
answer = wine[0][1]
else:
wine[1][0] = wine[0][1] + wine[1][1]
for i in range(2, N):
wine[i][0] = wine[i-1][1] + wine[i][1]
if M < max(wine[i-2][0], wine[i-2][1]):
M = max(wine[i-2][0], wine[i-2][1])
wine[i][1] += M
a, b = wine[-1]
c, d = wine[-2]
answer = max(a, b, c, d)
print(answer)
'Coding Test' 카테고리의 다른 글
[프로그래머스] 단속카메라 (0) | 2021.07.07 |
---|---|
[프로그래머스] 행렬의 곱셈 (0) | 2021.07.06 |
[백준] 한조서열정리하고옴ㅋㅋ (0) | 2021.07.05 |
[백준] 과제 (0) | 2021.07.02 |
[프로그래머스] [3차] 자동완성 (0) | 2021.07.02 |
Comments