MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 2606๋ฒˆ: ๋ฐ”์ด๋Ÿฌ์Šค ๋ณธ๋ฌธ

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

[swift] ๋ฐฑ์ค€ - 2606๋ฒˆ: ๋ฐ”์ด๋Ÿฌ์Šค

MUKER 2023. 3. 23. 19:49
 

2606๋ฒˆ: ๋ฐ”์ด๋Ÿฌ์Šค

์ฒซ์งธ ์ค„์—๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋Š” 100 ์ดํ•˜์ด๊ณ  ๊ฐ ์ปดํ“จํ„ฐ์—๋Š” 1๋ฒˆ ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ ์Œ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด

www.acmicpc.net


๋‚˜์˜ ํ’€์ด

let computerCount = Int(readLine()!)!
let networkCount = Int(readLine()!)!
var network = Array(repeating: [Int](), count: computerCount+1)
var virus = [1]
var result = [Int]()
for _ in 0..<networkCount {
    let i = readLine()!.split(separator: " ").map { Int($0)! }
    network[i[0]].append(i[1])
    network[i[1]].append(i[0])
}
while !virus.isEmpty {
    let pop = virus.popLast()!
    for i in network[pop] {
        if !result.contains(i) && !virus.contains(i) { virus.append(i) }
    }
    result.append(pop)
}
print(result.count-1)

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

DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)
virus๋Š” ๋…ธ๋“œ 1์—์„œ๋ถ€ํ„ฐ ํผ์ ธ ๋‚˜๊ฐ‘๋‹ˆ๋‹ค.
virus๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด 1์„ ๋„ฃ๊ณ 
virus๊ฐ€ ๋น„์›Œ์งˆ ๋•Œ๊นŒ์ง€ while๋ฌธ์„ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.
virus์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ pop ์‹œํ‚ค๋ฉด ์ฒ˜์Œ ์žˆ๋˜ ๋…ธ๋“œ 1์ด ์ง€์›Œ์ง€๋ฉฐ
๋ณ€์ˆ˜ pop์— ๋‹ด์•„ pop(1)์— ํ•ด๋‹นํ•˜๋Š” ๋„คํŠธ์›Œํฌ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š”
๋…ธ๋“œ๋ฅผ virus์— ๋‹ด์Šต๋‹ˆ๋‹ค.
๊ณผ์ •์†์—์„œ ์ค‘๋ณต์„ ์ง€์šฐ๊ธฐ ์œ„ํ•ด result์— ํฌํ•จ๋˜์ง€ ์•Š๊ฑฐ๋‚˜, virus์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ๋งŒ virus์— ๋‹ด์•„์คฌ์Šต๋‹ˆ๋‹ค.
๋ฐ˜๋ณต์ด ๋๋‚œ ๋…ธ๋“œ๋Š” result์— ๋‹ด์•„ ๋ฐฉ๋ฌธํ‘œ์‹œ(๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆผ)๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.

์ฃผ์˜ํ•  ์ ์€ ๋ฐ”์ด๋Ÿฌ์Šค๋Š” ์•ž, ๋’ค ๋ชจ๋‘ ํผ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ 5 ๋…ธ๋“œ๋Š” 8์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  8 ๋…ธ๋“œ๋Š” 1 ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค๋ฉด
1 ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ 8 ๋…ธ๋“œ๋„ ๊ฐ์—ผ๋˜๊ณ , 8 ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” 5 ๋…ธ๋“œ๋„ ๊ฐ์—ผ๋ฉ๋‹ˆ๋‹ค.