요구능력 : DFS와 백트래킹에 대한 이해
코드설명 :
N과 M(1) 에서 "같은 수를 여러번 골라도 된다." 라는 조건이 더해졌다.
기존의 N과M에서 방문여부를 따지지 않으면 된다.
n = 4, m = 4 인 경우를 생각해보자.
1 1 1 1
1 1 1 2
1 1 1 3
.
.
간단하게 스택을 생각하면 된다.
[1, 1, 1, 1]일 때, 모든 dfs의 i = 1일 때 이다.
이걸 str에 추가하고 나서 return하면 result = [1, 1, 1]이 되고, i = 2가 실행된다.
그럼 result = [1, 1, 1, 2]가 되고, str에 추가된다.
이런식으로 맨 나중에 들어온걸 빼고 그 다음수를 넣는 식으로 스택이 진행된다.
후기 : N과M(1) 문제에 간단한 조건1개만 추가한 문제
N과 M의 실행순서를 잘 이해하고 있느냐가 관건인것같다. 혹시나해서 빼봣는데 얻어걸렸지만..
let arr = readLine()!.split(separator: " ").map{ Int(String($0))!}
let n = arr[0]
let m = arr[1]
var depth = 0
var result: [Int] = []
var str = ""
func dfs(_ depth: Int) {
if depth == m {
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)
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
[Swift][BruteForce] 백준 10819번 (차이를 최대로) (0) | 2021.09.28 |
---|---|
[Swift][DFS] 백준 15652번 (N과M(4)) (0) | 2021.09.27 |
[Swift][BFS] 백준 1697번 (숨바꼭질) (0) | 2021.09.27 |
[Swift][DFS] 백준 11724번 (연결 요소의 개수) (0) | 2021.09.26 |
[Swift][DFS] 백준 13023번 (ABCDE) (0) | 2021.09.25 |
댓글