소토
소토의 기록하는 삶
소토
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • Algorithm (34)
      • Problem (34)
    • Web (0)
    • ML & AI (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • 문제
  • 직장인자기계발
  • 직장인인강
  • 패캠챌린지
  • 패스트캠퍼스
  • 패스트캠퍼스후기
  • 백준
  • 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
  • 코드스테이츠

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
소토

소토의 기록하는 삶

Algorithm/Problem

[Baekjoon] 2156번 : 포도주 시식

2022. 1. 21. 18:20

실버 1

 

2156번: 포도주 시식

효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규

www.acmicpc.net

 

문제 풀이

이전 계단 오르기 문제와 비슷했다. 

2022.01.20 - [Algorithm/Problem] - [Baekjoon] 2579번 : 계단 오르기

 

n 번째 와인을 먹는 경우는 한 칸 전의 와인을 먹는 경우(1)와 두칸 전의 와인을 먹는 경우(2)로 나뉜다. 

(1)번 경우는 n-3 와인까지의 최대 양에 n-1번째 와인의 양과 n번째 와인의 양을 더한 것이다.

(2)번 경우는 n-2 와인까지의 최대 양에 n 번째 와인의 양을 더한 것이다.

 

여기까지는 계단 문제와 동일한 풀이이다. 

이 문제에서는 추가로 마지막 와인을 안먹을 수 있기 때문에 n번째 와인을 안먹고 n-1번째 와인까지의 최대양도 비교해준다. 

 

이 세가지 경우의 최대값을 n번째 최대 양으로 넣어주면 된다.

 

코드

# 포도주 마시기
n = int(input())
wine = []
for _ in range(n):
    wine.append(int(input()))

score = [0] * (n + 1)
score[1] = wine[0]
if n >= 2:
    score[2] = wine[0] + wine[1]

for i in range(3, n+1):
    a = score[i-2] + wine[i-1] # 2칸 띄고 현재 와인을 먹는 경우
    b = score[i-3] + wine[i-2] + wine[i-1] # 전전전 와인 + 이전 와인 + 현재 와인으로 먹는 경우
    c = score[i-1] # 이전 와인까지의 최대값
    score[i] = max(a, b, c)

print(max(score))
728x90
저작자표시 (새창열림)

'Algorithm > Problem' 카테고리의 다른 글

[Baekjoon] 2565번 : 전깃줄  (0) 2022.01.25
[Baekjoon] 11054번 : 가장 긴 바이토닉 부분 수열  (0) 2022.01.24
[Baekjoon] 1463번 : 1로 만들기  (0) 2022.01.20
[Baekjoon] 2579번 : 계단 오르기  (0) 2022.01.20
[Baekjoon] 1149번 : RGB거리  (0) 2022.01.20
    소토
    소토

    티스토리툴바