[프로그래머스] 프렌즈4블록 - Swift

이창형·2023년 4월 26일
0

문제가 또 기네요 역시 카카오

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
}

회고

  • 단순 구현 문제였지만 5시간이나 걸렸다
  • 테스트케이스 9번 10번이 계속 틀려서 고민을 오래했다
  • 9번은 공백을 문자로 표현해서 틀리는 단순한 오류였다
  • 10번은 내 코드가 공백을 하나씩 위로 올려주다보니까 공백 위에 공백이 나타날 경우를 대비하지 못했다
  • 공백위에 공백이 나오는 경우의 수를 저장한 후 그 횟수만큼 다시 반복문을 돌려 해결하였다
  • 그래도 풀려서 뿌듯하다
profile
iOS Developer

0개의 댓글