요구능력
DFS와 정렬
문제풀이
위의 BFS스페셜저지와 동일한 문제입니다.
바뀌는점은 BFS -> DFS인것 밖에 없습니다.
어려운것없이 1번노드를 먼저방문하도록 dfs(1)로 함수를 호출합니다.
그리고 연결된노드를 깊이우선탐색합니다.
DFS()
func dfs(_ start: Int){
visited[start] = true
result.append(start)
for i in graph[start]{
if !visited[i]{
dfs(i)
}
}
}
후기
BFS스페셜저지에서 DFS로 바꾸기만하면 정답
코드
import Foundation
let n = Int(String(readLine()!))!
var arr = [[Int]]()
var graph = Array(repeating: [Int](), count: n + 1)
for _ in 0..<n-1{
let a = readLine()!.split(separator: " ").map{Int(String($0))!}
graph[a[0]].append(a[1])
graph[a[1]].append(a[0])
}
var order = readLine()!.split(separator: " ").map{Int(String($0))!}
var dfsOrder = Array(repeating: -1, count: order.count + 1)
for i in 0..<order.count{
dfsOrder[order[i]] = i + 1
}
var result = [Int]()
var visited = Array(repeating: false, count: n + 1)
func dfs(_ start: Int){
visited[start] = true
result.append(start)
for i in graph[start]{
if !visited[i]{
dfs(i)
}
}
}
for i in 1...n{
graph[i].sort{dfsOrder[$0] < dfsOrder[$1]}
}
dfs(1)
if result == order {
print(1)
}else{
print(0)
}
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
[Swift][Bruteforce] 백준 6064번(카잉 달력) (0) | 2022.04.11 |
---|---|
[Swift][BFS] 백준 1600번 (말이 되고픈 원숭이) (0) | 2022.04.08 |
[Swift][BFS] 백준 16940번 (BFS 스페셜 저지) (0) | 2022.03.26 |
[Swift][BFS] 백준 16954번 (움직이는 미로 탈출) (0) | 2022.03.23 |
[Swift][Graph] 백준 12946번 (육각보드) (4) | 2022.03.22 |
댓글