본문 바로가기

# 02/Swift - CTP

[Swift] 백준! 2606번 - 바이러스

반응형

https://www.acmicpc.net/problem/2606

 

2606번: 바이러스

첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어

www.acmicpc.net

import Foundation

public struct Queue<T> {
  fileprivate var array = [T]()
  
  public var isEmpty: Bool {
    return array.isEmpty
  }
  
  public var count: Int {
    return array.count
  }
  
  public mutating func enquque(_ element: T) {
    array.append(element)
  }
  
  public mutating func dequeue() -> T? {
    if isEmpty {
      return nil
    } else {
      return array.removeFirst()
    }
  }
  
  public var front: T? {
    return array.first
  }
}

let n = Int(readLine()!)!
let m = Int(readLine()!)!
var list:[[Int]] = []
for _ in 1...m {
    let l = readLine()!.split(separator: " ").map{ Int(String($0))! }
    list.append(l)
}
var visited:[Bool] = Array.init(repeating: false, count: n)
var graph:[[Int]] = Array.init(repeating: [], count: n)
for l in list {
    var ll = graph[l[0]-1]
    ll.append(l[1]-1)
    graph[l[0]-1] = ll

    var lll = graph[l[1]-1]
    lll.append(l[0]-1)
    graph[l[1]-1] = lll
}

var queue = Queue<Int>()

func bfs(start: Int) {
  queue.enquque(start)
  visited[start] = true
    
  while !queue.isEmpty {
    guard let elem = queue.dequeue() else { return }
    
    for i in graph[elem] {
      if !visited[i] {
        queue.enquque(i)
          visited[i] = true
      }
    }
  }
}

bfs(start: 0)
print(visited.filter{ $0 }.count-1)
반응형