프렌즈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;
}
- 4블록에 맞는 조건의 인덱스를 찾는다
- 해당 블록을 0으로 처리한다
- 블록을 재정렬해준다
- 재귀로 반복한다
- 0의 갯수를 리턴한다
Author And Source
이 문제에 관하여(프렌즈4블록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tlatmdxo123/프렌즈4블록저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)