Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

개발의변화

프로그래머스 LV2 프렌즈블록 본문

알고리즘

프로그래머스 LV2 프렌즈블록

refindmySapporo 2023. 4. 11. 21:48
반응형

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

해설

function solution(m, n, board) {
    let curBoard = [...board.map(block => [...block])].concat();
    let newBoard = [...board.map(block => [...block])].concat();
     console.log(curBoard,newBoard)
    while (true) { 
        let count = 0;
        for (let x = 0; x < m - 1; x++) {
            for (let y = 0; y < n - 1; y++) {
                if (curBoard[x][y] === '') continue;
                if (curBoard[x][y] === curBoard[x][y + 1] && curBoard[x][y] === curBoard[x + 1][y] && curBoard[x][y] === curBoard[x + 1][y + 1]) {
                    newBoard[x][y] = '';
                    newBoard[x + 1][y] = '';
                    newBoard[x][y + 1] = '';
                    newBoard[x + 1][y + 1] = '';
                    count += 1;
                }
            }
        }

        for (let x = 0; x < m - 1; x++) {
            for (let y = 0; y < n; y++) {
                if (newBoard[x + 1][y] === '') {
                    for (let i = x; i >= 0; i--) {
                        newBoard[i + 1][y] = newBoard[i][y];
                        newBoard[i][y] = '';
                    }
                }
            }
        }
        curBoard = [...newBoard.map(block => [...block])].concat();
        if (count === 0) break;
    }

    const allBoards = newBoard.reduce((acc, cur) => acc.concat(cur));
    return allBoards.filter(block => block === '').length;
}

이차원배열을 두 개를 만들어서 curBoard에서 블록을 지울 것을 찾으면 그것을 newBoard에 지울 블록들을 넣는 방식을 활용해서 나타낸다

반응형