MUKER_DEV with iOS

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ํ”ผ๋กœ๋„ ๋ณธ๋ฌธ

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

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ํ”ผ๋กœ๋„

MUKER 2023. 3. 27. 23:34
 

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

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

programmers.co.kr


๋‚˜์˜ ํ’€์ด

func solution(_ k:Int, _ dungeons:[[Int]]) -> Int {
    var used = Array(repeating: false, count: dungeons.count)
    var result = 0
    func backtrack(arr: [Int]) {
        if arr.count == dungeons.count {
            print(arr)
            var num = k
            var count = 0
            for i in arr {
                if num >= dungeons[i][0] {
                    num -= dungeons[i][1]
                    count += 1
                } else { break }
            }
            if count > result { result = count }
            return
        }
        for i in 0..<dungeons.count {
            if !used[i] {
                used[i] = true
                backtrack(arr: arr+[i])
                used[i] = false
            }
        }
    }
    backtrack(arr: [])
    return result
}

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

Backtracking(๋ฐฑํŠธ๋ž˜ํ‚น)
๋ฐฑํŠธ๋ž˜ํ‚น ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ธ๋ฑ์Šค์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์™„์ „ํƒ์ƒ‰์œผ๋กœ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ฐฑํŠธ๋ž˜ํ‚น์„ ์‚ฌ์šฉํ•ด ๊ตฌํ•œ ๋ชจ๋“  ์ˆœ์„œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ˜„์žฌ ํ”ผ๋กœ๋„์— ๋Œ€์ž…ํ•ด
์ œ์ผ ๋งŽ์ด ๋˜์ „์„ ๋ˆ ํšŸ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ •๋‹ต์€ ๊ตฌํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๋ฐฑํŠธ๋ž˜ํ‚น์˜ ํŠน์„ฑ์ƒ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ์—
๋” ์ข‹์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฐพ์•„ ๊ณต๋ถ€ํ•ด ๋ด์•ผ ํ• ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.