요구능력 : DFS와 백트래킹에 대한 이해
코드설명 :
N과 M(1) 에서 "고른 수열은 오름차순 이어야 한다." 라는 조건이 더해졌다.
그럼 우선 수열은 골라놔야하고 그 수열에서 오름차순인지를 판별해서 오름차순인것만 출력하면된다.
그래서 수열이 다 골라지고 print하는 지점에서 배열이 오름차순이면 출력하고 아니면 그냥 리턴하도록 하였다.
후기 : N과M(1) 문제에 간단한 조건1개만 추가한 문제
let arr = readLine()!.split(separator: " ").map{Int(String($0))!}
let n = arr[0]
let m = arr[1]
var visited = Array(repeating: false, count: n + 1)
var depth = 0
var result: [Int] = []
dfs(depth)
func dfs(_ depth: Int){
if depth == m {
if result.sorted() == result { //추가된 조건
print(result.map{String($0)}.joined(separator: " "))
return
}else {
return
}
}
for i in 1...n{
if !visited[i] {
visited[i] = true
result.append(i)
dfs(depth + 1)
visited[i] = false
result.removeLast()
}
}
}
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
[Swift][DFS] 백준 11724번 (연결 요소의 개수) (0) | 2021.09.26 |
---|---|
[Swift][DFS] 백준 13023번 (ABCDE) (0) | 2021.09.25 |
[Swift][BruteForce] 백준 10974번 (모든 순열) (0) | 2021.09.24 |
[Swift][DFS][백트래킹] 백준 15649번 (N과 M (1)) (0) | 2021.09.23 |
[Swift][DP] 백준 11053번 (가장 긴 증가하는 부분수열) (0) | 2021.09.22 |
댓글