프렌즈4블록

프렌즈4블록

https://programmers.co.kr/learn/courses/30/lessons/17679


문제풀이

function recursive(m, n, board){
    const match = []
    for(let i=0;i<m-1;i++){
        for(let j=0;j<n-1;j++){
            if(board[i][j] && board[i][j] === board[i+1][j] && board[i][j] === board[i][j+1] && board[i][j] === board[i+1][j+1]){
                match.push([i,j])
              //1. 조건에 맞는 인덱스 찾기
            }
        }
    }
  
  //재귀의 기저조건
    if(match.length===0){
        return board
    }
  //2.해당 인덱스 주변 4블록을 0으로 처리
    for(let i=0;i<match.length;i++){
        board[match[i][0]][match[i][1]] = 0
        board[match[i][0]+1][match[i][1]] = 0
        board[match[i][0]][match[i][1]+1] = 0
        board[match[i][0]+1][match[i][1]+1] = 0
       
    }
  
    for(let j=0;j<n;j++){
        //3.블록의 열을 반복해서 순회하면서 재정렬
        while(true){
            let isSwap = 0
            for(let i=0;i<m-1;i++){
                if(board[i][j]!==0&&board[i+1][j]===0){
                    const temp = board[i][j]
                    board[i][j] = board[i+1][j]
                    board[i+1][j] = temp
                    isSwap++
                } 
            }
            if(isSwap===0){
                break
            }
            
        }
    }
    
  //4.재귀로 반복
    return recursive(m, n, board)
}

function solution(m, n, board) {
    board = board.map(list => list.split(''))
    
    const arr = recursive(m, n, board)
    let count =0
    for(let i=0;i<m;i++){
        for(let j=0;j<n;j++){
            if(arr[i][j] === 0){
                count++
            }
        }
    }
    return count;
}
  1. 4블록에 맞는 조건의 인덱스를 찾는다
  2. 해당 블록을 0으로 처리한다
  3. 블록을 재정렬해준다
  4. 재귀로 반복한다
  5. 0의 갯수를 리턴한다

좋은 웹페이지 즐겨찾기