공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/코딩테스트 문제풀이

[Python] 백준 2156. 포도주 시식

inspirit941 2020. 9. 11. 23:53
반응형

www.acmicpc.net/problem/2156

 

2156번: 포도주 시식

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

www.acmicpc.net

 

DP문제. 점화식은 잘 구했는데, 점화식에 맞춰서 arr를 생성하는 과정에 또 시간소모가 심했다.

table[i] = i번째 위치에서 마실 수 있는 최댓값이라고 정의하면

  • i-1번째와 i-2번째 둘 다 마신 경우 = i번째 위치를 마실 수 없으므로 table[i-1]
  • i-1번째를 마시지 않은 경우 = table[i-2] + arr[i]
  • i-2번째를 마시지 않은 경우 = table[i-3] + arr[i-1] + arr[i]

따라서 반복문을 순회할 때, i는 최소 3부터 시작해서 n만큼 순회해야 한다. 한다. table[i-3]이 존재해야 하기 때문.

그렇다는 건, 최초로 포도주 배열을 생성할 때, 앞부분 세 자리는 비어 있어야 한다는 뜻이다.

 

 

반응형