프로그래머스 Level 2 - 프렌즈4블록
📌 문제 설명
📌 생각한 풀이 방법
- 2x2를 만족하는 점을 찾는다
- 해당 점들을 0으로 바꾼다.
- board의 점 중 0인 경우 해당 점 위의 점들을 한칸 내린다.
- 1~3의 작업을 만족하는 점이 없을 때까지 반복한다.
- board중 값이 0인 경우, answer을 증가시킨다.
📌 풀이
function solution(m, n, board) {
let answer = 0;
let poppedArr = [];
board = board.map((current) => current.split(""));
while (true) {
for (let i = 0; i < m - 1; i++) {
for (let j = 0; j < n - 1; j++) {
let current = board[i][j];
if (current !== 0) {
if (
board[i + 1][j] === current &&
board[i][j + 1] === current &&
board[i + 1][j + 1] === current
) {
poppedArr.push([i, j]);
}
}
}
}
if (poppedArr.length === 0) {
break;
}
for (let i = 0; i < poppedArr.length; i++) {
let [m, n] = poppedArr[i];
board[m][n] = 0;
board[m + 1][n] = 0;
board[m][n + 1] = 0;
board[m + 1][n + 1] = 0;
}
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (board[i][j] === 0) {
for (let k = i; k > 0; k--) {
board[k][j] = board[k - 1][j];
}
board[0][j] = 0;
}
}
}
poppedArr = [];
}
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (board[i][j] === 0) {
answer++;
}
}
}
return answer;
}