MUKER_DEV with iOS

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ˆซ์ž ๋ณ€ํ™˜ํ•˜๊ธฐ ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/programmers

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ˆซ์ž ๋ณ€ํ™˜ํ•˜๊ธฐ

MUKER 2023. 4. 25. 22:52
 

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

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


์„ฑ๊ณต ํ’€์ด

func solution(_ x: Int, _ y: Int, _ n: Int) -> Int {
    var dp = Array(repeating: Int.max, count: y+1)
    dp[x] = 0
    for i in x..<y where dp[i] != Int.max {
        let num1 = i + n
        let num2 = i * 2
        let num3 = i * 3
        
        if num1 <= y {
            dp[num1] = min(dp[i]+1,dp[num1])
        }
        if num2 <= y {
            dp[num2] = min(dp[i]+1,dp[num2])
        }
        if num3 <= y {
            dp[num3] = min(dp[i]+1,dp[num3])
        }
    }
    return dp[y] == Int.max ? -1 : dp[y]
}

ํ’€์ด ํ‚ค์›Œ๋“œ

DP
์ตœ์†Œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด DP๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค.
์• ๋งคํ•˜๊ฒŒ BFS๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์—
๋ณดํŽธ์ ์ธ ์ƒํ™ฉ์—์„œ ์‹œ๊ฐ„๋ณต์žก๋„์— ์œ ๋ฆฌํ•œ DP๋กœ ํ’€์—ˆ๋‹ค.

dp๋ฐฐ์—ด์„ Int.max๋กœ ์ดˆ๊ธฐํ™” ์‹œํ‚จ ๋’ค
dp[x]์—๋Š” count์˜ ์‹œ์ž‘์„ ์œ„ํ•ด 0์„ ๋„ฃ๋Š”๋‹ค.

dp๋Š” ํ•ด๋‹น ์ˆซ์ž์˜ ์ตœ์†Œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
dp[y]๋ฐฐ์—ด์„ ํ˜ธ์ถœํ•˜๋ฉด y์˜ ์ตœ์†Œ ์—ฐ์‚ฟ ํšŸ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค.