HIT해
[Swift] 백준 - 안전영역 본문
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 |