๐ŸŒžAlgorithm/๐Ÿ”ฅprogrammers

[programmers] ์ •์ˆ˜ ์‚ผ๊ฐํ˜•

๋ฟŒ์•ผ._. 2021. 8. 23. 23:58

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋™์  ๊ณ„ํš๋ฒ•(Dynamic Programming)

 


<์ •์ˆ˜ ์‚ผ๊ฐํ˜•>

๋ฌธ์ œ ์„ค๋ช…

 

์œ„์™€ ๊ฐ™์€ ์‚ผ๊ฐํ˜•์˜ ๊ผญ๋Œ€๊ธฐ์—์„œ ๋ฐ”๋‹ฅ๊นŒ์ง€ ์ด์–ด์ง€๋Š” ๊ฒฝ๋กœ ์ค‘,
๊ฑฐ์ณ๊ฐ„ ์ˆซ์ž์˜ ํ•ฉ์ด ๊ฐ€์žฅ ํฐ ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์•„๋ž˜ ์นธ์œผ๋กœ ์ด๋™ํ•  ๋•Œ๋Š” ๋Œ€๊ฐ์„  ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์นธ ์˜ค๋ฅธ์ชฝ ๋˜๋Š” ์™ผ์ชฝ์œผ๋กœ๋งŒ ์ด๋™ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด 3์—์„œ๋Š” ๊ทธ ์•„๋ž˜์นธ์˜ 8 ๋˜๋Š” 1๋กœ๋งŒ ์ด๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์‚ผ๊ฐํ˜•์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด triangle์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ,
๊ฑฐ์ณ๊ฐ„ ์ˆซ์ž์˜ ์ตœ๋Œ“๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

 

 

์ œํ•œ ์‚ฌํ•ญ

 

- ์‚ผ๊ฐํ˜•์˜ ๋†’์ด๋Š” 1 ์ด์ƒ 500 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
- ์‚ผ๊ฐํ˜•์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ์ˆซ์ž๋Š” 0 ์ด์ƒ 9,999 ์ดํ•˜์˜ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.

 

๋ฌธ์ œ ํ’€์ด

  - my solution

def solution(triangle):

    dp=[triangle[0]] #์ฒซ๋ฒˆ์งธ ์ค„ ๊ทธ๋Œ€๋กœ
    for i in range(len(triangle)-1):
        temp=[]
        for j in range(i+1):
            if j>0: #์™ผ์ชฝ ๋Œ€๊ฐ์„ 
                if temp[-1]<dp[i][j]+triangle[i+1][j]: #์•ž์—์„œ ๋”ํ•œ ๊ฐ’ ๋ณด๋‹ค ๋” ํฌ๋ฉด
                    temp[-1]=dp[i][j]+triangle[i+1][j] #์—…๋ฐ์ดํŠธ
            else: # ์™ผ์ชฝ ๋Œ€๊ฐ์„ 
                temp.append(dp[i][j] + triangle[i + 1][j])
            temp.append(dp[i][j]+triangle[i+1][j+1]) #์˜ค๋ฅธ์ชฝ ๋Œ€๊ฐ์„ 
        dp.append(temp) 

    return max(dp[-1]) #๋งˆ์ง€๋ง‰ ์ค„์—์„œ ์ตœ๋Œ“๊ฐ’ ์ถœ๋ ฅ

 

์˜ˆ์ „์— ์ด์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณธ ์ ์ด ์žˆ์–ด ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

dp๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค! ๋ฌผ๋ก  ๋ฌธ์ œ ์ œ๋ชฉ์—์„œ '๋™์  ๊ณ„ํš๋ฒ•'์ด๋ผ ๋‚˜์™€์žˆ์–ด ๋‹น์—ฐํ•˜๋‹ค ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ

๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  '์•„ dp๋ฅผ ํ™œ์šฉํ•ด์•ผ๊ฒ ๋‹ค'๋ผ๊ณ  ๋– ์˜ฌ๋ž๋‹จ ๋ง์ด๋‹ค!

 

  • ์ฒซ ๋ฒˆ์งธ ์ค„์€ ๋ฐฐ์—ด์— ๊ทธ๋Œ€๋กœ ๋„ฃ์–ด์ค€๋‹ค.
  • ์™ผ์ชฝ ๋Œ€๊ฐ์„ , ์˜ค๋ฅธ์ชฝ ๋Œ€๊ฐ์„  ๋‘˜ ์ค‘ ํ•˜๋‚˜๋กœ๋งŒ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ ์ค€๋‹ค
  • ๋งจ ์™ผ์ชฝ ๋Œ€๊ฐ์„ ์œผ๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ฐฐ์—ด์— ๋„ฃ์–ด์ค€๋‹ค.
  • ์˜ค๋ฅธ์ชฝ ๋Œ€๊ฐ์„ ๊ณผ ์™ผ์ชฝ ๋Œ€๊ฐ์„  ์ค‘ ํฐ ๊ฐ’์œผ๋กœ ๋ฐฐ์—ด์„ ์—…๋ฐ์ดํŠธํ•ด์ค€๋‹ค.
  • ๋งˆ์ง€๋ง‰ ์ค„์—์„œ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅ

 

๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•˜๋ฉด ๋ง๋ณด๋‹ค ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋‚˜์ค‘์˜ ๋‚ด๊ฐ€ ๊ธ€๋งŒ ๋ด๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ•œ๋‹ค๐Ÿ˜


์ƒ๊ฐ๐Ÿค”

 

์ด ๋ฌธ์ œ๋Š” ๋ฐฑ์ค€๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์— ๋‘˜ ๋‹ค ์ถœ์ œ๋˜์–ด์žˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ๋Š” Level 3, ๋ฐฑ์ค€์—์„œ๋Š” ์‹ค๋ฒ„ 1

 

๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์–ป์€ ๊ฒƒ 

1.  dp ํ™œ์šฉ


์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต, https://programmers.co.kr/learn/challenges