MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 11724๋ฒˆ: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/BAEKJOON

[swift] ๋ฐฑ์ค€ - 11724๋ฒˆ: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

MUKER 2023. 4. 14. 23:12
 

11724๋ฒˆ: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N๊ณผ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฐ„์„ ์˜ ์–‘ ๋์  u์™€ v๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ u, v ≤ N, u ≠ v) ๊ฐ™์€ ๊ฐ„์„ ์€ ํ•œ ๋ฒˆ๋งŒ ์ฃผ

www.acmicpc.net


์„ฑ๊ณต ํ’€์ด (BFS)

let NM = readLine()!.split(separator: " ").map { Int($0)! }
let N = NM[0], M = NM[1]
var arr = Array(repeating: [Int](), count: N+1)
var visited = [Bool](repeating: false, count: N+1)
var count = 0
for _ in 0..<M {
    let i = readLine()!.split(separator: " ").map { Int($0)! }
    arr[i[0]].append(i[1])
    arr[i[1]].append(i[0])
}
for i in 1...N {
    var queue = [Int]()
    if visited[i] { continue }
    queue.append(i)
    while !queue.isEmpty {
        let n = queue.removeFirst()
        visited[n] = true
        for j in arr[n] {
            if !visited[j] && !queue.contains(j) {
                queue.append(j)
            }
        }
    }
    count += 1
}
print(count)

ํ’€์ด ํ‚ค์›Œ๋“œ

BFS
๊ธฐ๋ณธ์ ์ธ  ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฌธ์ œ๋‹ค.
queue๋ฅผ ์‚ฌ์šฉํ•ด ๋„“์ด ์šฐ์„  ํƒ์ƒ‰์„ ํ–ˆ๋‹ค.
๋”ฐ๋กœ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ๋‚œ์žกํ•ด ๋ณด์ธ๋‹ค.

์„ฑ๊ณต ํ’€์ด (DFS)

let NM = readLine()!.split(separator: " ").map { Int($0)! }
let N = NM[0], M = NM[1]
var arr = Array(repeating: [Int](), count: N+1)
var visited = [Bool](repeating: false, count: N+1)
var count = 0
for _ in 0..<M {
    let i = readLine()!.split(separator: " ").map { Int($0)! }
    arr[i[0]].append(i[1])
    arr[i[1]].append(i[0])
}
func dfs(_ n:Int) {
    visited[n] = true
    for i in arr[n] {
        if !visited[i] {
            dfs(i)
        }
    }
}
for i in 1...N {
    if !visited[i] {
        dfs(i)
        count+=1
    }
}
print(count)

ํ’€์ด ํ‚ค์›Œ๋“œ

DFS