🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] μ •μˆ˜ μ‚Όκ°ν˜• (level3, python)

개발자 HOON 2022. 9. 9. 14:49

문제 μ„€λͺ…

 

μœ„μ™€ 같은 μ‚Όκ°ν˜•μ˜ κΌ­λŒ€κΈ°μ—μ„œ λ°”λ‹₯κΉŒμ§€ μ΄μ–΄μ§€λŠ” 경둜 쀑, 거쳐간 숫자의 합이 κ°€μž₯ 큰 경우λ₯Ό 찾아보렀고 ν•©λ‹ˆλ‹€. μ•„λž˜ 칸으둜 이동할 λ•ŒλŠ” λŒ€κ°μ„  λ°©ν–₯으둜 ν•œ μΉΈ 였λ₯Έμͺ½ λ˜λŠ” μ™Όμͺ½μœΌλ‘œλ§Œ 이동 κ°€λŠ₯ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 3μ—μ„œλŠ” κ·Έ μ•„λž˜μΉΈμ˜ 8 λ˜λŠ” 1둜만 이동이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

μ‚Όκ°ν˜•μ˜ 정보가 λ‹΄κΈ΄ λ°°μ—΄ triangle이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, 거쳐간 숫자의 μ΅œλŒ“κ°’μ„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜μ„Έμš”.


μ œν•œμ‚¬ν•­
 
  • μ‚Όκ°ν˜•μ˜ λ†’μ΄λŠ” 1 이상 500 μ΄ν•˜μž…λ‹ˆλ‹€.
  • μ‚Όκ°ν˜•μ„ 이루고 μžˆλŠ” μˆ«μžλŠ” 0 이상 9,999 μ΄ν•˜μ˜ μ •μˆ˜μž…λ‹ˆλ‹€.

 

μž…μΆœλ ₯ 예
triangle return
[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30

 

풀이 μ½”λ“œ

def solution(triangle):
    if len(triangle) == 1:
        return triangle[0][0]
    
    for h in range(1, len(triangle)):
        for r in range(h+1):
            if r == 0:
                triangle[h][r] = triangle[h][r] + triangle[h-1][r]
            elif r == h:
                triangle[h][r] = triangle[h][r] + triangle[h-1][r-1]
            else:
                triangle[h][r] = max(triangle[h][r] + triangle[h-1][r-1], triangle[h][r] + triangle[h-1][r])
                
    answer = max(triangle[-1])
    return answer

 

λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ˜ μ „ν˜•μ μΈ 문제.

μ‚Όκ°ν˜•μ˜ κ°€μž₯ μ™Όμͺ½ μˆ˜λŠ”, triangle[h][r] += triangle[h-1][r]

κ°€μž₯ 였λ₯Έμͺ½ μˆ˜λŠ”, triangle[h][r] += triangle[h-1][r-1]

λ‚˜λ¨Έμ§€ μˆ˜λŠ” 두 λ°©ν–₯ 쀑 큰 λ°©ν–₯을 선택해 κ°±μ‹ ν•˜λ©΄ λœλ‹€.

μ΅œμ’…μ μœΌλ‘œ κ°€μž₯ μ•„λž˜ λ³€μ˜ μ›μ†Œ 쀑 κ°€μž₯ 큰 값을 μ„ νƒν•˜λ©΄ 정닡이닀.