Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / Python] ์ •์ˆ˜ ์‚ผ๊ฐํ˜•

meeeeejin 2021. 4. 6. 16:22

๋ฌธ์ œ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/43105

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ •์ˆ˜ ์‚ผ๊ฐํ˜•

[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

๊ฑฐ์ณ์˜จ ์ˆซ์ž๋“ค์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ €์žฅํ•˜๋Š” dp ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 

 

triangle[i][j]์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

  1. triangle[i - 1][j - 1]์—์„œ triangle[i][j]๋กœ ๊ฐ€๊ธฐ
  2. triangle[i - 1][j]์—์„œ triangle[i][j]๋กœ ๊ฐ€๊ธฐ

dp[i][j]๋Š” ์œ„ ๋‘ ๊ฐ€์ง€ ๊ฐ’ ์ค‘์—์„œ ์ตœ๋Œ“๊ฐ’์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 

 

 

์˜ˆ๋ฅผ ๋“ค์–ด triangle ๋ฐฐ์—ด์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋ฉด

7        
3 8      
8 1 0    
2 7 4 4  
4 5 2 6 5

dp ํ…Œ์ด๋ธ”์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. 

7        
10(7 + 3) 15(7 + 8)      
18(10 + 8) 16(15 + 1) 15(15 + 0)    
20(18 + 2) 25(18 + 7) 20(16 + 4) 19(15 + 4)  
24(20 + 4) 30(25 + 5) 27(25 + 2) 26(20 + 6) 24(19 + 5)

dp ํ…Œ์ด๋ธ” ๊ณ„์‚ฐ์ด ๋๋‚œ ํ›„์— ๋งˆ์ง€๋ง‰ ์ค„์˜ ์›์†Œ ์ค‘์—์„œ ์ตœ๋Œ“๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 

 

 

 

์†Œ์Šค์ฝ”๋“œ

def solution(triangle):
    # dp ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
    dp = [[0] * len(triangle) for _ in range(len(triangle))]
    dp[0][0] = triangle[0][0]
    # ๊ฑฐ์ณ๊ฐ„ ์ˆซ์ž์˜ ์ตœ๋Œ“๊ฐ’ ๊ตฌํ•˜๊ธฐ
    for i in range(0, len(triangle) - 1):
        for j in range(len(triangle[i])):
            dp[i + 1][j] = max(dp[i + 1][j], dp[i][j] + triangle[i + 1][j])
            dp[i + 1][j + 1] = max(dp[i + 1][j + 1], dp[i][j] + triangle[i + 1][j + 1])

    return max(dp[-1]) # dp ํ…Œ์ด๋ธ”์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋“ค ์ค‘ ์ตœ๋Œ“๊ฐ’ ๋ฐ˜ํ™˜

 

 

 

 

 

728x90