Algorithm/문제풀이_백준

[Swift][DFS] 백준 15652번 (N과M(4))

Joahnee 2021. 9. 27. 22:49

요구능력 : DFS와 백트래킹에 대한 이해

 

코드설명 : 

 

N과M(3) 에서 "비내림차순" 이라는 조건이 더해졌다.

비내림차순은 앞에수가 뒤에수보다 작으면 안된다.

예를들면,

1 2 2는 되는데, 1 2 1은 안된다.

 

어차피 출력만 제대로하면 되는거니, 출력을 만드는 부분(결과가 도출되는 부분)에서 조건을 줘서 조건에 맞지않으면 출력을 못하게 만들었다.

 

후기 : N과M(3) 문제에 간단한 조건1개만 추가한 문제

처음에 dfs도는 쪽에 넣었다가.. 도저히 아닌거같아서, 결과쪽에 넣으니 해결

let arr = readLine()!.split(separator: " ").map{Int(String($0))!}
let n = arr[0]
let m = arr[1]
var result: [Int] = []
var depth = 0
var str = ""
func dfs(_ depth: Int){
    var isStr: Bool = true
    if depth == m {
        for i in 0..<m {
            if i > 0, result[i] < result[i - 1]{
                isStr = false
            }
        }
        if isStr {
            str += "\(result.map{String($0)}.joined(separator: " "))"
            str += "\n"
        }
        
        return
    }
    for i in 1...n{
        result.append(i)
        dfs(depth + 1)
        result.removeLast()
    }
}

dfs(depth)
print(str)