Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Archives
Today
Total
관리 메뉴

Life Engineering

[BOJ 2156] 포도주 시식 (Python3) 본문

Problem Solving

[BOJ 2156] 포도주 시식 (Python3)

흑개 2021. 2. 23. 00:35

www.acmicpc.net/problem/2156

 

2156번: 포도주 시식

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

www.acmicpc.net

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
= int(input())
d=[0]*n
array=[]
for _ in range(n):
    array.append(int(input()))
 
for i in range(n):
    if i==0:
        d[0]=array[0]
    elif i==1:
        d[1]=d[0]+array[1]
    elif i==2:
        d[2]=max(array[0], array[1])+array[2]
    else:
        d[i]=max(max(d[:i-2])+array[i-1], max(d[:i-1]))+array[i]
 
print(max(d))
cs

넘넘 어렵게 풀었다..

i 번째 포도주를 먹을 때, max(i-1번째를 먹고+i-3번째를 먹었을 때 최댓값 vs i-2번째 먹었을 때 최댓값)이렇게 초기에 식을 세웠는데, 틀려서 반례를 돌려봐서 다시 체크해보았다. 고친 부분은 저 초록색 친 부분이 i-3번째 이하, i-2번째 이하 최댓값들 중 최댓값을 고르는 방식으로 바뀐 점이다. 그런데. 다른분 풀이 보니깐 이렇게 복잡하게 할 필요 없고 마찬가지로 최종 결과값을 반환할 때 max(d) 를 하지 않아도 d[n-1]만 해도 나오는 점화식을 보게 되었다.

 

rebas.kr/836

 

BOJ 2156 · 포도주 시식

알고리즘 분류 : 다이나믹 프로그래밍  N개의 포도주 잔이 있을 때, 최대로 마실 수 있는 포도주의 양을 구해야 한다. DP를 이용하여 포도주 마시는 규칙에 따라 구현하면 된다. 포도주는 연속으

rebas.kr

d[i]를 3가지로 분류해서 점화식을 세우는데 이때 나머지 2가지는 내가 한 방식과 같고 남은 1가지는 i 번째 포도주를 마시지 않고 건너뛰고 d[i]=d[i-1] 해주는 경우이다.

이렇게 마시지 않는 경우도 추가하면 위의 문제 상황들을 해결할 수 있다.

'Problem Solving' 카테고리의 다른 글

[BOJ 3190] 뱀 (Python3)  (0) 2021.02.24
[BOJ 3079] 입국심사 (Python3)  (0) 2021.02.24
[BOJ 9465] 스티커 (Python3)  (0) 2021.02.22
[BOJ 1912] 연속합 (Python3)  (0) 2021.02.22
[BOJ 9019] DSLR (Python3)  (0) 2021.02.22