Swift랑 친해지기/programmers 풀기

[프로그래머스] 2018 KAKAO BLIND RECRUITMENT[1차] 프렌즈4블록 (Swift)

데브킹덕 2023. 5. 24. 13:39

5,10번에서 막힘

전 - 같은 열에 있는 문자의 행을 위,아래 교환하여 풀었음

후 - 하위 행에서 상위행으로 탐색하도록 순서를 변경 하였고, 비어있을 경우 하위행에서 비어있지 않은 가장 가까운 행의 값으로 변경하고 그자리는 비워두도록 하였다.

이유: 2x2일 경우 한번에 지우고 비어 있는 가장 낮은 곳으로 한번에 자리해야함

 

 

1. board의 요소를 한 문자씩 나누어 가지도록 함

이유 -> 게임판처럼 만들기 위함??

boardArray 문자열 2차원 배열에 매핑하였음

 

2. boardArray의 2x2의 문자가 모두 같으면 setCordi에 추가하도록함

이유: 겹쳐져서 없어져야 될 수도 있기 때문에 set을 이용함

 

3. setCordi에 들어간 값들은 없어져야 할 값들이기 때문에 boardArray에 위치한 값을 "0"으로 바꾸도록함

지워질 값들을 구하는게 목표기 때문에 count에 +1을함

 

4. stride메서드를 이용해 가장 하위(값이 높은)행부터 읽어드리도록함

"0"이라면 같은 열에서 상향식으로 차근차근 보았을 때 "0"이 아닌 값을 가져오도록함

 

5.while true문을 이용해 무한반복하였고 setCordi에 값이 없으면 지워질게 없는 것이니 return하도록 하였다.

import Foundation

func solution(_ m:Int, _ n:Int, _ board:[String]) -> Int {
    
    var boardArray: [[String]] = [[String]]()
    var count = 0
    
    for ele in board{
        boardArray.append(ele.map{String($0)})
    }

    while true{
        
        var setCordi = Set<[Int]>()
                
        for i in 0..<m-1{ //행의 개수
            for j in 0..<n-1{ //열의 개수
                if boardArray[i][j] != "0" && boardArray[i][j] == boardArray[i][j+1] && boardArray[i+1][j] == boardArray[i+1][j+1] && boardArray[i][j] == boardArray[i+1][j+1]{ //1번
                    setCordi.insert([i,j])
                    setCordi.insert([i,j+1])
                    setCordi.insert([i+1,j])
                    setCordi.insert([i+1,j+1])
                }
            }
        }
        
        if setCordi.isEmpty{
            return count
        }
        
        for i in setCordi{
            boardArray[i[0]][i[1]] = "0"
            count += 1
        }

        
        for i in stride(from: m-1, to: 0, by: -1){
            for j in 0..<n{
                if boardArray[i][j] == "0"{
                    for p in stride(from: i, through: 0, by: -1){
                        if boardArray[p][j] != "0" && boardArray[i][j] == "0"{
                            boardArray[i][j] = boardArray[p][j]
                            boardArray[p][j] = "0"
                        }
                    }
                }
            }
        }
    }
    
    return count
}