250x250
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
- 경사하강법
- 밑바닥부터 시작하는 딥러닝
- pyenv
- BOJ
- n과 m
- 파이썬
- 파이싼
- N-Queen
- 백준
- 9020
- 오블완
- end to end
- streamlit
- 15649
- REST
- 티스토리챌린지
- 4948
- REST API
- Python
- 1002
- 신경망 학습
- 기계학습
- 재귀
- 개발환경
- 그리디 알고리즘
- 백트래킹
- 실버
- 손실함수
- 가상환경
- 1101
Archives
- Today
- Total
파이톨치
[BOJ][Python] 2156-포도주 시식 본문
728x90
[문제 및 출처]
https://www.acmicpc.net/problem/2156
2156번: 포도주 시식
효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규
www.acmicpc.net
[어떻게 풀까?]
계단 오르기와 굉장히 유사하지만 한가지 다른 점이 있는데, 그건 건너뛰는 것이다. 계단오르기의 경우 마지막 계단을 무조건 올라야 했지만 포도주 시식은 그럴 필요가 없다. 또한 필요에 따라서 3개씩 건너서 마셔도 된다.
대충 그림으로 그리면 이런식으로 될 것이다. 중간에 글자는 NO를 쓴것이다 ^^.
[코드]
n = int(input())
nums = []
dp = [0 for i in range(n)]
for i in range(n):
new = int(input())
nums.append(new)
if n > 0:
dp[0] = nums[0]
if n > 1:
dp[1] = nums[1] + nums[0]
if n > 2:
dp[2] = max(nums[0]+nums[1], nums[0]+nums[2], nums[1]+nums[2])
for i in range(3, n):
dp[i] = max(dp[i-1], dp[i-3] + nums[i-1]+nums[i], dp[i-2]+nums[i])
print(max(dp))
728x90
'알고리즘' 카테고리의 다른 글
[백준] 그리디 알고리즘 - 회의실 배정 (0) | 2021.08.11 |
---|---|
[백준] 그리디 알고리즘-동전0 (1) | 2021.08.10 |
[BOJ][Python] 2579번-계단 오르기 (0) | 2021.08.07 |
[BOJ][Python][2580] 스도쿠 - 시간초과 (0) | 2021.08.04 |
[BOJ][Pyhon][9184] 신나는 함수 실행 (0) | 2021.08.02 |