λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
CS/μ•Œκ³ λ¦¬μ¦˜

λ°±μ€€ 2156 파이썬 - 포도주 μ‹œμ‹ - 동적 κ³„νšλ²•

by πŸŒ»β™š 2021. 10. 10.

λ°±μ€€ 2156 파이썬

https://www.acmicpc.net/problem/2156

 

2156번: 포도주 μ‹œμ‹

νš¨μ£ΌλŠ” 포도주 μ‹œμ‹νšŒμ— κ°”λ‹€. κ·Έ 곳에 κ°”λ”λ‹ˆ, ν…Œμ΄λΈ” μœ„μ— λ‹€μ–‘ν•œ 포도주가 λ“€μ–΄μžˆλŠ” 포도주 μž”μ΄ 일렬둜 놓여 μžˆμ—ˆλ‹€. νš¨μ£ΌλŠ” 포도주 μ‹œμ‹μ„ ν•˜λ €κ³  ν•˜λŠ”λ°, μ—¬κΈ°μ—λŠ” λ‹€μŒκ³Ό 같은 두 가지 규

www.acmicpc.net

ν•΄λ‹Ή λ¬Έμ œλŠ” 주어진 쑰건에 μ˜ν•΄ κ°€μž₯ λ§Žμ€ μ–‘μ˜ 포도주λ₯Ό μ‹œμ‹ν•˜λŠ” 방법을 κ΅¬ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

  • ν¬λ„μ£Όμ˜ μž”μ„ μ„ νƒν•˜λ©΄ λͺ¨λ‘ λ§ˆμ…”μ•Όν•œλ‹€.
  • μ—°μ†μœΌλ‘œ 놓여 μžˆλŠ” 3μž”μ„ λͺ¨λ‘ λ§ˆμ‹€ 수 μ—†λ‹€.

[CS/μ•Œκ³ λ¦¬μ¦˜] - λ°±μ€€ 2579 파이썬 - 계단 였λ₯΄κΈ° - 동적 κ³„νšλ²• λ¬Έμ œμ™€ μœ μ‚¬ν•œ 문제인데 차이가 μžˆλ‹€λ©΄ κ°€μž₯ λ§ˆμ§€λ§‰ μž”μ„ κΌ­ λ§ˆμ‹œμ§€ μ•Šμ•„λ„ λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 즉, μ΅œλŒ€κ°’μ„ ꡬ할 λ•Œ 쑰건이 ν•˜λ‚˜ 더 뢙을 κ±°λΌλŠ” μ˜ˆμ •μž…λ‹ˆλ‹€.

 

μ—°μ†μœΌλ‘œ 3μž”μ„ λ§ˆμ‹œμ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμ— μ΅œλŒ€λ‘œ 연속 2개의 와인을 λ§ˆμ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€. 그리고 λ§ˆμ§€λ§‰ 와인을 κΌ­ λ§ˆμ‹€ ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. 이런 ν•œ 쑰건으둜 μ•„λž˜μ™€ 같은 κ·œμΉ™μ΄ μƒκΉλ‹ˆλ‹€.

  • ν˜„μž¬ μœ„μΉ˜μ˜ 와인을 λ§ˆμ‹œκ³  λ°”λ‘œ μ „ 와인을 λ§ˆμ…¨λ‹€λŠ” 것은 -3 μœ„μΉ˜μ˜ μ΅œλŒ€κ°’μ—μ„œ ν•˜λ‚˜ κ±΄λ„ˆ λ›΄ κ²½μš°λ‹€.
  • ν˜„μž¬ μœ„μΉ˜μ˜ 와인을 λ§ˆμ‹œκ³  이전 와인이 κ±΄λ„ˆ λ›΄ 와인이라면 -2 μœ„μΉ˜μ˜ μ΅œλŒ€κ°’μ„ λ”ν•œ κ²½μš°λ‹€.
  • ν˜„μž¬ μœ„μΉ˜μ˜ 와인을 λ§ˆμ‹œμ§€ μ•Šμ•˜λ‹€λ©΄ -1 μœ„μΉ˜μ˜ μ΅œλŒ€κ°’μ΄ ν˜„μž¬ μœ„μΉ˜μ˜ μ΅œλŒ€κ°’μ΄λ‹€.

case 1κ³Ό case2의 쑰건은 λ§ˆμ§€λ§‰ μž”μ„ 무쑰건 λ§ˆμ…”μ•Όν•˜κΈ° λ•Œλ¬Έμ— 계단 였λ₯΄κΈ° λ¬Έμ œμ™€ λ˜‘κ°™μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이번 λ¬Έμ œμ—μ„œ λ‹€λ₯Έ 쑰건은 λ§ˆμ§€λ§‰ 와인을 κΌ­ λ§ˆμ‹œμ§€ μ•Šμ•„λ„ 되기 λ•Œλ¬Έμ— κ±΄λ„ˆ λ›Έ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

Python 풀이

import sys
read = sys.stdin.readline

N = int(read())
wines = [0] + [int(read()) for _ in range(N)] + [0]
dp = [0] * (N+2)
dp[1] = wines[1]
dp[2] = dp[1] + wines[2]

for i in range(3, N+1):
    dp[i] = max(dp[i-3]+wines[i-1]+wines[i], dp[i-2]+wines[i], dp[i-1])
print(dp[N])
  • 1κ³Ό 2의 μœ„μΉ˜κΉŒμ§€λŠ” μ΅œλŒ€κ°’μ΄ μ—°μ†μœΌλ‘œ λ§ˆμ‹  κ²½μš°μ΄λ―€λ‘œ μ΄ˆκΈ°κ°’μ„ 지정해쀀닀.
  • μ΄ˆκΈ°κ°’ 섀정에 λ•ŒλΌ dp의 리슀트 길이λ₯Ό μ΄ˆκΈ°κ°’ 만큼 λ”ν•˜κ³  wines μ–‘μͺ½μ—λ„ 리슀트 길이λ₯Ό μΆ”κ°€ν•œλ‹€.
    • N이 1 인 경우 wines[2] λ•Œλ¬Έμ—  Index out of bounds 였λ₯˜κ°€ λ°œμƒν•œλ‹€.
  • 쑰건에 맞게 μ΅œλŒ€κ°’μ„ κ΅¬ν•΄μ„œ 좜λ ₯ν•œλ‹€.

λŒ“κΈ€