HIT해

[Swift/백준] N과 M (5) 본문

Swift/Swift 알고리즘

[Swift/백준] N과 M (5)

힛해 2024. 10. 3. 17:56
728x90

 

import Foundation

var flag = [Bool](repeating: false, count: 10001)
var result : [Int] = []
var nums : [Int] = []

func main() {
    
    let NM = readLine()!.split(separator: " ").map { Int($0)! }
    let (N,M) = (NM[0], NM[1]) // N 총 숫자, M depth
    let XYZ = readLine()!.split(separator: " ").map { Int($0)! }
    nums = XYZ.sorted()
    
    backtracking(N: N, M: M, depth: 0)
}

func backtracking(N : Int, M : Int, depth : Int) {
    
    if M == depth {
        print( result.map {String($0) }.joined(separator: " ")  )
        return
    }
    
    for i in 0..<N {
    
        if flag[nums[i]] == false {
            flag[nums[i]] = true
            result.append(nums[i])
            backtracking(N: N, M: M, depth: depth + 1)
            flag[nums[i]] = false
            result.removeLast()
        }
        
    }
}

main()