프로그래머스 #JavaScript - [1차]프렌즈4블록

SSO·2020년 2월 19일
0

프로그래머스 Lv2

목록 보기
39/46

문제

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;
                    }
                }
            }
        }
    }
}

더 생각해보기

행렬구조의 배열 다루는 연습 더 필요

참고사항

profile
happy

0개의 댓글