https://programmers.co.kr/learn/courses/30/lessons/17679
//어려움..
// 해결 못해서 다른사람의 풀이 보고 공부*** -> 완전히 이해X
// 카카오 코테 해설
https://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/
// 다른사람의 풀이
function solution(m, n, board) {
board = board.map(v => v.split(''));
while (true) {
let founded = [];
// 찾기 - 네 개중 우측 하단 모서리 인덱스 기준
for (let i = 1; i < m; i++) {
for (let j = 1; j < n; j++) {
if (board[i][j] && board[i][j] === board[i][j - 1] && board[i][j] === board[i - 1][j - 1] && board[i][j] === board[i - 1][j]) {
founded.push([i, j]);
}
}
}
if (! founded.length)
return [].concat(...board).filter(v => ! v).length;
// 부수기 - 지워질 것 0으로 채우기
founded.forEach(a => {
board[a[0]][a[1]] = 0;
board[a[0]][a[1] - 1] = 0;
board[a[0] - 1][a[1] - 1] = 0;
board[a[0] - 1][a[1]] = 0;
});
// 재정렬 - ?? 이부분 이해가 안돼..
for (let i = m - 1; i > 0; i--) {
if (! board[i].some(v => ! v)) continue;
for (let j = 0; j < n; j++) {
for (let k = i - 1; k >= 0 && ! board[i][j]; k--) {
if (board[k][j]) {
board[i][j] = board[k][j];
board[k][j] = 0;
break;
}
}
}
}
}
}
행렬구조의 배열 다루는 연습 더 필요