https://school.programmers.co.kr/learn/courses/30/lessons/17679#
import Foundation
func solution(_ m:Int, _ n:Int, _ board:[String]) -> Int {
// 2차 배열로 변환 해주는 함수
func make2DArray(_ board:[String]) -> [[String]] {
var array = [[String]]()
for i in board {
var arr = [String]()
for j in i {
arr.append(String(j))
}
array.append(arr)
}
return array
}
// 공백을 위로 올려주는 함수
func eraseX(_ array: [[String]]) -> [[String]] {
var array = array
var count = 0
for i in (1..<array.count).reversed() {
for j in 0..<array[0].count {
if array[i][j] == "-1" {
array[i][j] = array[i-1][j]
array[i-1][j] = "-1"
}
}
}
return array
}
var arrayBoard = make2DArray(board)
var arrayBoard2 = make2DArray(board)
// 2*2의 사각형이 완성되면 공백으로 만들어주는 함수
func check(_ array1: [[String]], _ array2: [[String]]) -> [[String]] {
var array1 = array1
var array2 = array2
let row = array1.count
let col = array1[0].count
for i in 0..<row - 1 {
for j in 0..<col - 1 {
if array1[i][j] != "-1" {
if array1[i][j] == array1[i][j+1] && array1[i][j] == array1[i+1][j] && array1[i][j] == array1[i+1][j+1] {
array2[i][j] = "-1"
array2[i][j+1] = "-1"
array2[i+1][j+1] = "-1"
array2[i+1][j] = "-1"
}
}
}
}
return eraseX(array2)
}
// 2*2의 사각형이 또 만들어지는지 검사
while true {
var chk = arrayBoard
arrayBoard = check(arrayBoard, arrayBoard2)
arrayBoard2 = arrayBoard
if chk == arrayBoard {
break
}
}
var count = 0
// 공백이 몇칸인지 셈
for i in 0..<m {
for j in 0..<n {
if arrayBoard[i][j] == "-1" {
count += 1
}
}
}
return count
}