[BFS] 백준: 유기농 배추(Swift)

2022. 10. 24. 16:16·코테

난이도: 실버2

사용 언어: Swift

카테고리: BFS

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

Code

struct Queue<T> {
  var memory = [T]()
  var index = 0
  
  var isEmpty: Bool {
    memory.count < index + 1
  }
  
  mutating func inQueue(element: T) {
    memory.append(element)
  }
  
  mutating func deQueue() -> T {
    let v = memory[index]
    index += 1
    return v
  }
}

let t = Int(readLine()!)!
var results = [Int]()
for _ in 0..<t {
  let result = start()
  results.append(result)
}

for p in results {
  print(p)
}

func start() -> Int {
  let mnk = readLine()!.split(separator: " ").map { Int($0)! }
  let m = mnk[0]
  let n = mnk[1]
  let k = mnk[2]

  var map = Array(repeating: Array(repeating: 0, count: m), count: n)

  for _ in 0..<k {
    let xy = readLine()!.split(separator: " ").map { Int($0)! }
    map[xy[1]][xy[0]] = 1
  }

  var result = 0

  func bfs(start: (y: Int, x: Int)) {
    result += 1
    map[start.y][start.x] = 0
    var q = Queue<(y: Int, x: Int)>()
    q.inQueue(element: start)
    
    let lrud: [(y: Int, x: Int)] = [
        (0,-1),
        (0,1),
        (-1,0),
        (1,0)
      ]
    
    while !q.isEmpty {
      let (newY, newX) = q.deQueue()
      
      for (my, mx) in lrud {
        let next: (y: Int, x: Int) = (my + newY, mx + newX)
        if (0..<n).contains(next.y) && (0..<m).contains(next.x) && map[next.y][next.x] == 1 {
          map[next.y][next.x] = 0
          q.inQueue(element: next)
        }
      }
    }
  }

  for i in 0..<n {
    for j in 0..<m {
      if map[i][j] == 1 {
        bfs(start: (i, j))
      }
    }
  }
  return result
}

'코테' 카테고리의 다른 글

[BFS] 백준: 적록색약(Swift)  (0) 2022.10.29
[BFS] 백준: 섬의 개수(Swift)  (0) 2022.10.27
[DFS]백준: 연결 요소의 개수(Swift)  (0) 2022.10.25
[DFS] 백준: 바이러스(Swift)  (0) 2022.10.20
[BFS] 백준: 단지번호붙이기(Swift)  (0) 2022.10.20
'코테' 카테고리의 다른 글
  • [BFS] 백준: 섬의 개수(Swift)
  • [DFS]백준: 연결 요소의 개수(Swift)
  • [DFS] 백준: 바이러스(Swift)
  • [BFS] 백준: 단지번호붙이기(Swift)
Esiwon
Esiwon
iOS 개발 블로그
  • Esiwon
    시원한 코드 기록
    Esiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • iOS&Swift (24)
      • git & github (1)
      • 코테 (41)
      • 네부캠 회고 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    완전탐색
    백준
    이분탐색
    재귀
    PhotoKit
    탐색
    ios
    Property wrapper
    비동기
    회고
    dfs
    코딩테스트
    BFS
    photoUI
    실버
    Race Condition
    photos
    네부캠
    GCD
    그리디
    챌린지
    브루트포스 알고리즘
    Combine
    동시성
    코테
    노드
    구현
    알고리즘
    Swift
    다이나믹 프로그래밍
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Esiwon
[BFS] 백준: 유기농 배추(Swift)
상단으로

티스토리툴바