새소식

인기 검색어

백준/골드

[Swift] 10026번 : 적록색약

  • -

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

 

10026번: 적록색약

적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)

www.acmicpc.net

import Foundation

let RED = "R"
let GREEN = "G"
let BLUE = "B"

var boardRGB: [[String]] = []
var boardRB: [[String]] = []

final class BFS {

    private let dx = [1, -1, 0, 0]
    private let dy = [0, 0, 1, -1]
    private let board: [[String]]
    
    private var visited: [[Bool]]
    
    private(set) var result = 0
    
    init(n: Int, board: [[String]]) {
        self.board = board
        self.visited = Array(repeating: Array(repeating: false, count: n), count: n)
    }
    
    func run(_ i: Int, _ j: Int) {
        if visited[i][j] { return }
        bfs(i, j)
        result += 1
    }
    
    private func bfs(_ i: Int, _ j: Int) {
        visited[i][j] = true
        var queue = [(i,j)]
        
        while !queue.isEmpty {
            let (x, y) = queue.removeFirst()
            
            for idx in 0..<4 {
                let nx = x + dx[idx]
                let ny = y + dy[idx]
                
                if nx < 0 || nx >= N || ny < 0 || ny >= N ||
                    visited[nx][ny] ||
                    board[x][y] != board[nx][ny] { continue }
                visited[nx][ny] = true
                queue.append((nx, ny))
            }
        }
    }
    
}

let N = Int(readLine()!)!
for _ in 1...N {
    let inputs = readLine()!
    
    boardRGB.append(inputs
        .map{ String($0) }
    )
    
    boardRB.append(inputs
        .replacingOccurrences(of: GREEN, with: RED)
        .map{ String($0) }
    )
}

let bfsRGB = BFS(n: N, board: boardRGB)
let bfsRB = BFS(n: N, board: boardRB)


for i in 0..<N {
    for j in 0..<N {
        bfsRGB.run(i, j)
        bfsRB.run(i, j)
    }
}

print("\(bfsRGB.result) \(bfsRB.result)")

 

'백준 > 골드' 카테고리의 다른 글

[Swift] 5427번 : 불  (0) 2024.03.18
[Swift] 7569번 : 토마토  (0) 2024.03.18
[Swift] 4179번 : 불!  (0) 2024.03.18
[Swift] 7576번 : 토마토  (0) 2024.03.18
[Swift] 2493번 : 탑  (0) 2024.01.12
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.