๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/12913

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋•…๋”ฐ๋จน๊ธฐ

๋•…๋”ฐ๋จน๊ธฐ ๊ฒŒ์ž„์„ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋•…๋”ฐ๋จน๊ธฐ ๊ฒŒ์ž„์˜ ๋•…(land)์€ ์ด Nํ–‰ 4์—ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๋ชจ๋“  ์นธ์—๋Š” ์ ์ˆ˜๊ฐ€ ์“ฐ์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค. 1ํ–‰๋ถ€ํ„ฐ ๋•…์„ ๋ฐŸ์œผ๋ฉฐ ํ•œ ํ–‰์”ฉ ๋‚ด๋ ค์˜ฌ ๋•Œ, ๊ฐ ํ–‰์˜ 4์นธ ์ค‘ ํ•œ ์นธ๋งŒ ๋ฐŸ

programmers.co.kr

๋ฌธ์ œ ์„ค๋ช…

๋•…๋”ฐ๋จน๊ธฐ ๊ฒŒ์ž„์„ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋•…๋”ฐ๋จน๊ธฐ ๊ฒŒ์ž„์˜ ๋•…(land)์€ ์ด Nํ–‰ 4์—ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๋ชจ๋“  ์นธ์—๋Š” ์ ์ˆ˜๊ฐ€ ์“ฐ์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค. 1ํ–‰๋ถ€ํ„ฐ ๋•…์„ ๋ฐŸ์œผ๋ฉฐ ํ•œ ํ–‰์”ฉ ๋‚ด๋ ค์˜ฌ ๋•Œ, ๊ฐ ํ–‰์˜ 4์นธ ์ค‘ ํ•œ ์นธ๋งŒ ๋ฐŸ์œผ๋ฉด์„œ ๋‚ด๋ ค์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ๋•…๋”ฐ๋จน๊ธฐ ๊ฒŒ์ž„์—๋Š” ํ•œ ํ–‰์”ฉ ๋‚ด๋ ค์˜ฌ ๋•Œ, ๊ฐ™์€ ์—ด์„ ์—ฐ์†ํ•ด์„œ ๋ฐŸ์„ ์ˆ˜ ์—†๋Š” ํŠน์ˆ˜ ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค๋ฉด,

| 1 | 2 | 3 | 5 |

| 5 | 6 | 7 | 8 |

| 4 | 3 | 2 | 1 |

๋กœ ๋•…์ด ์ฃผ์–ด์กŒ๋‹ค๋ฉด, 1ํ–‰์—์„œ ๋„ค๋ฒˆ์งธ ์นธ (5)๋ฅผ ๋ฐŸ์•˜์œผ๋ฉด, 2ํ–‰์˜ ๋„ค๋ฒˆ์งธ ์นธ (8)์€ ๋ฐŸ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

๋งˆ์ง€๋ง‰ ํ–‰๊นŒ์ง€ ๋ชจ๋‘ ๋‚ด๋ ค์™”์„ ๋•Œ, ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ ์ˆ˜์˜ ์ตœ๋Œ€๊ฐ’์„ returnํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”. ์œ„ ์˜ˆ์˜ ๊ฒฝ์šฐ, 1ํ–‰์˜ ๋„ค๋ฒˆ์งธ ์นธ (5), 2ํ–‰์˜ ์„ธ๋ฒˆ์งธ ์นธ (7), 3ํ–‰์˜ ์ฒซ๋ฒˆ์งธ ์นธ (4) ๋•…์„ ๋ฐŸ์•„ 16์ ์ด ์ตœ๊ณ ์ ์ด ๋˜๋ฏ€๋กœ 16์„ return ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ œํ•œ์‚ฌํ•ญ

  • ํ–‰์˜ ๊ฐœ์ˆ˜ N : 100,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • ์—ด์˜ ๊ฐœ์ˆ˜๋Š” 4๊ฐœ์ด๊ณ , ๋•…(land)์€ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
  • ์ ์ˆ˜ : 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜

ํ’€์ด

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

 

์•„๋ž˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด ํŽ˜์ด์ง€์—์„œ ๊น”๋”ํ•˜๊ฒŒ ์ž˜ ์ž‘์„ฑ๋œ ํ’€์ด๋ฅผ ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค! 

import Foundation

func solution(_ land:[[Int]]) -> Int{
    var answer = 0
    var land = land
    for i in 0..<(land.count-1) {
        land[i+1][0] += max(land[i][1], land[i][2], land[i][3])
        land[i+1][1] += max(land[i][0], land[i][2], land[i][3])
        land[i+1][2] += max(land[i][0], land[i][1], land[i][3])
        land[i+1][3] += max(land[i][0], land[i][1], land[i][2])
    }

    guard let last = land.last else { return 0 }
    return max(last[0],last[1], last[2], last[3])
}

์ฝ”๋“œ

import Foundation

func solution(_ land:[[Int]]) -> Int{
    var dp = land
    
    for i in 1..<land.count {
        for j in 0..<land[0].count {
            for k in 0..<land[0].count {
                if j == k { continue }
                dp[i][j] = max(dp[i][j], dp[i-1][k] + land[i][j])
            }
        }
    }
    
    return dp.last!.max()!
}