-
[프로그래머스] 프렌즈 4블록 자바스크립트(Javascript)알고리즘(algorithm)/프로그래머스 2022. 1. 10. 16:23
문제
https://programmers.co.kr/learn/courses/30/lessons/17679
풀이
const replaceBoard = (m, n, boardArray) => { const sameStringArray = []; for (let i = 0; i < m; i++) { for (let j = 0; j < n; j++) { let x = i, y = j; if (boardArray[i][j]) { const string = boardArray[i][j]; if (x + 1 < m && y + 1 < n) { if ( boardArray[i + 1][j] === string && boardArray[i][j + 1] === string && boardArray[i + 1][j + 1] === string ) { sameStringArray.push([i, j]); } } } } } sameStringArray.map(([a, b]) => { boardArray[a][b] = ''; boardArray[a + 1][b] = ''; boardArray[a][b + 1] = ''; boardArray[a + 1][b + 1] = ''; }); return [boardArray, sameStringArray]; }; const moveToEmptyBottom = (m, n, array) => { for (let i = m - 1; i > 0; i--) { for (let j = 0; j < n; j++) { if (array[i][j] !== '') { continue; } for (let k = i - 1; k > -1; k--) { if (array[k][j] !== '') { [array[i][j], array[k][j]] = [array[k][j], array[i][j]]; break; } } } } return array; }; function solution(m, n, board) { let boardArray = [...board.map((v) => [...v])]; let indexArray = [], boardArray1, array1; while (true) { [boardArray1, indexArray] = replaceBoard(m, n, boardArray); if (indexArray.length === 0) break; array1 = moveToEmptyBottom(m, n, boardArray1); boardArray = [...array1]; } let answer = 0; boardArray.map((array) => array.map((string) => { if (!string) answer++; }) ); return answer; }
해설
1. 계산하기 편하도록 1차원 배열을 2차원 배열로 변경한다.
2. replaceBoard라는 함수 - 오른쪽 아래 대각선아래의 값이 현재값과 같을 경우 ''(빈칸)으로 만든다.
3. moveToEmptyBottom - 아래서부터 위로 빈값이 있는지 체크하면서 배열을 확인한다.
4. while문 안에서 (2)의 값이 없을경우 break를 해서 빠져나온다.
태그 백준 BOJ 번호 제목 파이썬
'알고리즘(algorithm) > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 실패율 자바스크립트(Javascript) (0) 2022.03.01 [프로그래머스] 신고 결과 받기 자바스크립트(Javascript) (0) 2022.03.01 [프로그래머스] 파일명 정렬 자바스크립트(Javascript) (0) 2022.01.07 [프로그래머스] 카카오 다트 게임 자바스크립트(Javascript) (0) 2021.11.26 [프로그래머스] 다리를 지나는 트럭 자바스크립트(Javascript) (0) 2021.11.26