약간의 몸풀기 수학챕터를 어느정도 풀었고...
이제는 메인 문제 타입 중 하나인 DFS, BFS를 풀 차례다.
문제 풀이를 할 때 마다 계속 추가됩니다.
cmd + F 를 통해 문제번호 찾기를 추천드립니다.
25.02.12 업데이트
25.02.16 업데이트
아래 깃허브 주소에서 백준 Swift 문제풀이를 확인하실 수 있습니다.
https://github.com/SuminPark-developer/BaekJoonPS
GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS
백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.
github.com
백준 Swift 2606번
문제 유형 : DFS
난이도 : 실버3
// MARK: - 2606번(DFS)
let M = Int(readLine()!)!
let N = Int(readLine()!)!
var board: [[Int]] = Array(repeating: Array(repeating: 0, count: M + 1), count: M + 1)
var visited = Array(repeating: false, count: M + 1)
for _ in 0..<N {
let input = readLine()!.split(separator: " ").map{Int(String($0))!}
let (y, x) = (input[0], input[1])
board[y][x] = 1
board[x][y] = 1
}
func dfs(_ index: Int) {
for next in 1...M {
if board[index][next] == 1 && visited[next] == false {
visited[next] = true
dfs(next)
}
}
}
dfs(1) // 1번컴퓨터 감염 시작
visited[1] = false // 1번컴퓨터는 제외
print(visited.filter{$0 == true}.count)
백준 Swift 1260번
문제 유형 : DFS, BFS
난이도 : 실버2
// MARK: - 1260번(DFS, BFS)
let input = readLine()!.split(separator: " ").map{Int(String($0))!}
let (N, M, V) = (input[0], input[1], input[2])
var board: [[Int]] = Array(repeating: Array(repeating: 0, count: N + 1), count: N + 1)
var visited: [Bool] = Array(repeating: false, count: N + 1)
//var visited: [[Bool]] = Array(repeating: Array(repeating: false, count: N + 1), count: N + 1)
for _ in 0..<M {
let input = readLine()!.split(separator: " ").map{Int(String($0))!}
let (y, x) = (input[0], input[1])
board[y][x] = 1
board[x][y] = 1
}
var answerDFS: [Int] = [V] // V는 무조건 첫방문
func dfs(_ index: Int) {
visited[index] = true
for next in 1...N {
if board[index][next] == 1 && visited[next] == false { // 연결되어 있고, 미방문이면,
visited[next] = true
answerDFS.append(next)
dfs(next)
}
}
}
dfs(V)
class Deque<T> {
var enQue: [T]
var deQue: [T] = []
var count: Int {
return enQue.count + deQue.count
}
var isEmpty: Bool {
return enQue.isEmpty && deQue.isEmpty
}
init(_ que: [T]) {
self.enQue = que
}
func pushFirst(_ element: T) {
deQue.append(element)
}
func pushLast(_ element: T) {
enQue.append(element)
}
func popFirst() -> T {
if deQue.isEmpty {
deQue = enQue.reversed()
enQue.removeAll()
}
return deQue.popLast()!
}
func popLast() -> T {
if enQue.isEmpty {
enQue = deQue.reversed()
deQue.removeAll()
}
return enQue.popLast()!
}
}
visited = Array(repeating: false, count: N + 1)
var myDeque = Deque([V])
var answerBFS: [Int] = []
func BFS(_ index: Int) {
visited[index] = true
while !myDeque.isEmpty {
let currentY = myDeque.popFirst()
answerBFS.append(currentY)
for next in 1...N {
if board[currentY][next] == 1 && visited[next] == false {
myDeque.pushLast(next)
visited[next] = true
}
}
}
}
BFS(V)
print(answerDFS.map{String($0)}.joined(separator: " "))
print(answerBFS.map{String($0)}.joined(separator: " "))
반응형
최근댓글