HIT해

[Swift] 백준 - 안전영역 본문

Swift/Swift 알고리즘

[Swift] 백준 - 안전영역

힛해 2024. 9. 11. 05:37
728x90

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

 

 

접근방식

BFS로 해결했고 비의 높이를 0 부터 최대 높이 이전까지 반복문을 돌려 각 상황별 영역을 비교해서 답을 구했다.

 

import Foundation

func main() {
    
    // 배열 크기
    let size = Int(readLine()!)!
    
    var arr : [[Int]] = []
    
    var maxHeight = 0
    
    var safeArea = 0
    
    let dx = [0,0,-1,1]
    let dy = [1,-1,0,0]
    
    for i in 0..<size{
        arr.append(readLine()!.split(separator: " ").map { Int($0)! })
        for j in arr[i]{
            if maxHeight < j {
                maxHeight = j
            }
        }
    }
    
    func findHigher(_ rain : Int) {
      var visited = [[Bool]](repeating: Array(repeating: false, count: size), count: size)
      
      var count = 0
        
      for i in 0..<size {
            for j in 0..<size{
                if arr[i][j] > rain && visited[i][j] == false{
                    findSafeArea([i,j] , &visited, rain)
                    count += 1
                }
            }
        }
        
        if safeArea < count {
            safeArea = count
        }
    }
    
    func findSafeArea(_ XY : [Int], _ visited : inout [[Bool]] , _ height : Int){
        var queue = [[Int]]()
        queue.append(XY)
        
        while !queue.isEmpty{
            let XY = queue.removeFirst()
            let x = XY[0]
            let y = XY[1]
            if visited[x][y] == false {
                visited[x][y] = true
                
                for i in 0..<4{
                   let nx = x + dx[i]
                   let ny = y + dy[i]
                   
                    guard nx >= 0 && ny >= 0 && nx < size && ny < size && arr[nx][ny] > height else {
                        continue
                    }
                    
                    queue.append([nx,ny])
                    
                }
                
            }
        }
        
        
    }
    
    for i in 0..<maxHeight {
        findHigher(i)
    }
    
    print(safeArea)
    
}

// main 함수 실행
main()

 

 

'Swift > Swift 알고리즘' 카테고리의 다른 글

[Swift] 배열 선언하기  (0) 2024.10.01
[Swift/프로그래머스] 세균증식 ( 제곱 )  (0) 2024.10.01
[Swift] 백준 - 제로 ( 스택 )  (0) 2024.09.11
[Swift] 백준 - 큐 2  (0) 2024.09.10
[Swift] 백준 - 미로찾기  (0) 2024.09.10