Algorithm Problem/Python

[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋„๋‘‘์งˆ

deo2kim 2020. 9. 12. 20:41
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

Lv4 | DP

 

"์ธ์ ‘ํ•œ ์ง‘์€ ํ„ธ ์ˆ˜ ์—†๋‹ค" ๊นŒ์ง€๋Š” ํฌ๊ฒŒ ์–ด๋ ค์šด ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ

"๋งˆ์„์ด ์›ํ˜•์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค" ์—์„œ ํ•œ๋ฒˆ ๋” ์ƒ๊ฐํ•˜๊ฒŒ ํ•˜๋Š” ๋ฌธ์ œ!!

-> 0๋ฒˆ์งธ ์ง‘์„ ํ„ฐ๋Š” ๊ฒฝ์šฐ( ๋งˆ์ง€๋ง‰ ์ง‘์„ ํ„ธ์ง€ ๋ชปํ•œ๋‹ค )์™€ 0๋ฒˆ์งธ ์ง‘์„ ์•ˆํ„ฐ๋Š” ๊ฒฝ์šฐ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

 

๋จผ์ € 0๋ฒˆ์ง‘์„ ํ„ธ ๊ฒฝ์šฐ!

  • 0๋ฒˆ์ง‘์— ๋“ค๋ €์„ ๋•Œ ๊ฐ€์žฅ ๋งŽ์€ ๋ˆ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ๋Š” 0๋ฒˆ์ง‘์„ ํ„ด๋‹ค. dp[0] = money[0]
  • 1๋ฒˆ์ง‘์— ๋“ค๋ €์„ ๋•Œ ๊ฐ€์žฅ ๋งŽ์€ ๋ˆ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ๋Š” 1๋ฒˆ์ง‘์„ ํ„ฐ๋Š” ๊ฒฝ์šฐ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” 1๋ฒˆ์ง‘์„ ๋ฐ˜๋“œ์‹œ ํ„ธ์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์œผ๋ฏ€๋กœ ์ธ์ ‘ํ•œ 2๋ฒˆ์ง‘์€ ํ„ธ ์ˆ˜ ์—†๋‹ค. dp[1] = 0
  • 2๋ฒˆ์ง‘์— ๋“ค๋ €์„ ๋•Œ: ์ธ์ ‘ํ•œ 1๋ฒˆ์ง‘์ด ์•„๋‹Œ 0๋ฒˆ์ง‘ ๋˜๋Š” -1๋ฒˆ์ง‘(2๋ฒˆ์ผ ๋•Œ๋Š” ์—†๋‹ค) ์ค‘ ๋ˆ์„ ๋งŽ์ด ๊ฐ€์ ธ์™”๋˜ ์ง‘์—์„œ ์˜จ๋‹ค.
    dp[2] = money[i] + max(dp[i-2], dp[i-1])
  • ๋งˆ์ง€๋ง‰์œผ๋กœ n๋ฒˆ์งธ ์ง‘์€ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•ด์•ผํ•œ๋‹ค. (1๋ฒˆ์ง‘์„ ํ„ธ์—ˆ์œผ๋ฏ€๋กœ 1๋ฒˆ๊ณผ ์ธ์ ‘ํ•œ n๋ฒˆ์ง‘์€ ํ„ธ๋ฉด ์•ˆ๋จ!!)

๋‹ค์Œ 0๋ฒˆ์ง‘์„ ์•ˆํ„ฐ๋Š” ๊ฒฝ์šฐ!

  • 0๋ฒˆ์ง‘์„ ํ„ธ์ง€ ์•Š์œผ๋ฏ€๋กœ dp[0] = 0
  • 0๋ฒˆ์ง‘ ์•ˆํ„ธ์—ˆ์œผ๋‹ˆ 1๋ฒˆ์ง‘์€ ํƒ„๋‹ค. dp[1] = money[1]

๐Ÿ’จ

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

def solution(money):
    answer = 0
    n = len(money)
    # 0๋ฒˆ์ง‘ ํ„ธ๊ธฐ
    dp1 = [0] * (n - 1)
    dp1[0] = money[0]
    dp1[1] = 0
    for i in range(2, n - 1):
        dp1[i] = money[i] + max(dp1[i - 2], dp1[i - 3])

    # 0๋ฒˆ์ง‘ ์•ˆํ„ธ๊ธฐ
    dp2 = [0] * (n)
    dp2[0] = 0
    dp2[1] = money[1]
    for i in range(2, n):
        dp2[i] = money[i] + max(dp2[i - 2], dp2[i - 3])

    answer = max(max(dp1), max(dp2))
    return answer

 

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

๋งํฌ: https://programmers.co.kr/learn/courses/30/lessons/42897

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋„๋‘‘์งˆ

๋„๋‘‘์ด ์–ด๋А ๋งˆ์„์„ ํ„ธ ๊ณ„ํš์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งˆ์„์˜ ๋ชจ๋“  ์ง‘๋“ค์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋™๊ทธ๋ž—๊ฒŒ ๋ฐฐ์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ง‘๋“ค์€ ์„œ๋กœ ์ธ์ ‘ํ•œ ์ง‘๋“ค๊ณผ ๋ฐฉ๋ฒ”์žฅ์น˜๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ ‘ํ•œ ๏ฟฝ๏ฟฝ

programmers.co.kr


๋ฌธ์ œ ์„ค๋ช…

๋„๋‘‘์ด ์–ด๋А ๋งˆ์„์„ ํ„ธ ๊ณ„ํš์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งˆ์„์˜ ๋ชจ๋“  ์ง‘๋“ค์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋™๊ทธ๋ž—๊ฒŒ ๋ฐฐ์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ์ง‘๋“ค์€ ์„œ๋กœ ์ธ์ ‘ํ•œ ์ง‘๋“ค๊ณผ ๋ฐฉ๋ฒ”์žฅ์น˜๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ ‘ํ•œ ๋‘ ์ง‘์„ ํ„ธ๋ฉด ๊ฒฝ๋ณด๊ฐ€ ์šธ๋ฆฝ๋‹ˆ๋‹ค.

๊ฐ ์ง‘์— ์žˆ๋Š” ๋ˆ์ด ๋‹ด๊ธด ๋ฐฐ์—ด money๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋„๋‘‘์ด ํ›”์น  ์ˆ˜ ์žˆ๋Š” ๋ˆ์˜ ์ตœ๋Œ“๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ์ด ๋งˆ์„์— ์žˆ๋Š” ์ง‘์€ 3๊ฐœ ์ด์ƒ 1,000,000๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • money ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋Š” 0 ์ด์ƒ 1,000 ์ดํ•˜์ธ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

money return
[1, 2, 3, 1] 4
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€์ˆ˜0