ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

문제

 

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

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

www.acmicpc.net

 

문제 풀이

 ν¬λ„μ£Ό λ§ˆμ…¨μ„ λ•Œ κ°€μž₯ 많이 λ§ˆμ‹œλŠ” 경우λ₯Ό μ°ΎλŠ” λ¬Έμ œμ΄λ‹€. 문제의 μ œν•œμ‚¬ν•­μœΌλ‘œ μ—°μ†ν•΄μ„œ 3μž” μ΄μƒμ˜ 포도주λ₯Ό λ§ˆμ‹€ 수 μ—†λ‹€. μ²˜μŒλΆ€ν„° μ„Έμž”μ˜ 와인을 λ§ˆμ‹€ 경우 λ§ˆμ‹€ 수 μžˆλŠ” ν¬λ„μ£ΌλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

 

  • OXO : 쀑간 와인을 λ§ˆμ‹œμ§€ μ•ŠλŠ” 경우
  • OOX : μ„Έ 번째 와인을 λ§ˆμ‹œμ§€ μ•ŠλŠ” 경우
  • XOO : 첫 번째 와인을 λ§ˆμ‹œμ§€ μ•ŠλŠ” 경우

 μ¦‰, 이전 와인과 ν˜„μž¬ 와인을 λ§ˆμ‹œλŠ” κ²½μš°μ™€ μ „μ „μ˜ 와인과 ν˜„μž¬ 와인을 λ§ˆμ‹œλŠ” 경우, ν˜„μž¬ 와인을 λ§ˆμ‹œμ§€ μ•ŠλŠ” 경우둜 λ‚˜λ‰˜μ–΄ 진닀.

 

μ½”λ“œ

from sys import stdin

if __name__ == '__main__':
    n = int(stdin.readline())
    memo = [0] * (n + 1)
    wine = [0] + [int(stdin.readline()) for _ in range(n)]
    if n > 1:
        memo[1], memo[2] = wine[1], wine[1] + wine[2]
    else:
        memo[n] = wine[n]
        
    for i in range(3, n + 1):
        memo[i] =\
            max(memo[i - 1],
                memo[i - 3] + wine[i - 1] + wine[i],
                memo[i - 2] + wine[i])
    print(memo[n])

 

 

 

 

728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€