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
- 스프링 배치 5
- job parameter
- 스프링배치 메타테이블
- 스프링 트랜잭션 관리
- 아이템 리더 페이징 처리
- mybatis
- abstractpagingitemreader
- 트랜잭션 분리
- aop proxy
- stepexecutionlistener
- 선언적 트랜잭션 관리
- JSONObject 분할
- 스프링배치 엑셀
- 스프링배치 csv
- flatfileitemwriter
- JSON 분리
- 읽기 작업과 쓰기 작업 분리
- executioncontext
- api 아이템 리더
- executioncontext 변수 공유
- spring batch 변수 공유
- Spring Batch
- 아이템 리더 커스텀
- spring batch 5
- JSON 분할
- 마이바티스 트랜잭션
- JSONArray 분할
- step 사이 변수 공유
- step 여러개
- step 값 공유
Archives
- Today
- Total
ebson
boj.kr/2156 포도주 시식 (silver1) 파이썬 풀이 본문
1. dp 리스트를 wines 리스트 길이 만큼 0으로 초기화한다.
2. wines의 길이 N이 1 이면 첫번째 포도주의 양을 출력한다.
3. N이 2이면 첫번째와 두번째 포도주의 양의 합을 출력한다.
4. N이 2보다 크면 dp[0]에 첫번째 포도주의 양, dp[1]에 첫번째와 두번째 포도주의 양의 합을 저장한다.
5. dp의 3번째 요소부터 마지막 요소까지 아래를 반복해 값을 갱신한다.
5.1. dp[i]에는 i번째 포도주를 마시지 않는 경우, i번째 포도주를 마시고 그 이전에도 마신 경우, i번째 포도주를 마시고 그 이전에는 마시지 않은 경우 중 최대값을 저장한다.
6. dp 리스트의 마지막 값을 출력한다.
N = int(input())
wines = [int(input()) for _ in range(N)]
dp = [0 for _ in range(N)]
if N == 1:
print(wines[0])
else:
dp[0] = wines[0]
dp[1] = wines[0]+wines[1]
if N == 2:
print(dp[1])
else:
for i in range(2, N):
dp[i] = max(dp[i-1], dp[i-3]+wines[i-1]+wines[i], dp[i-2]+wines[i])
print(dp[N-1])
dp[i]를 연속으로 3잔을 마실 수 없다는 조건을 충족하면서 최대로 포도주를 마시는 경우로 저장할 수 있다.
'ALGORITHM STUDY WITH PYTHON > DP' 카테고리의 다른 글
boj.kr/11052 카드 구매하기 (silver1) 파이썬 풀이 (0) | 2023.06.11 |
---|---|
boj.kr/9251 LCS (gold5) 파이썬 풀이 (0) | 2023.06.10 |
boj.kr/1932 정수 삼각형 (silver1) 파이썬 풀이 (0) | 2023.06.04 |
boj.kr/1149 RGB거리 (silver1) 파이썬 풀이 (0) | 2023.06.04 |
boj.kr/1937 욕심쟁이 판다 (gold3) 파이썬 풀이 (0) | 2023.05.03 |