[프로그래머스] 안전지대

stella·2023년 1월 10일
0

Algorithm

목록 보기
15/40
post-thumbnail

문제

다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.

지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.


풀이

function solution(board) {
    const dx = [-1, 1, 0, 0, -1, -1, 1, 1];
    const dy = [0, 0, -1, 1, -1, 1, -1, 1];
    
    // 지뢰가 설치된 곳
    const bomb = [];
    for (let x = 0; x < board.length; x++) {
        for (let y = 0; y < board.length; y++) {
            if (board[x][y] === 1) {
                bomb.push([x, y]);
                // console.log(bomb)
            }
        }
    }
    
    // 지뢰가 설치된 곳 주변에 폭탄 설치
    bomb.forEach(([x, y]) => {
        for (let i = 0; i < 8; i++) {
            const nx = x + dx[i];
            const ny = y + dy[i];
            if (0 <= nx && nx < board.length && 0 <= ny && ny < board.length) {
                board[nx][ny] = 1;
            }
        }
    })
    
    // 폭탄이 설치되지 않은 곳만 카운트
    let count = 0;
    for (let x = 0; x < board.length; x++) {
        for (let y = 0; y < board.length; y++) {
            if (board[x][y] === 0) {
                count++;
            }
              console.log(board[x][y])
        }
    }
    return count;
}

forEach 부분 코드가 잘 이해가 안된다... 😩

profile
Frontend Engineer

0개의 댓글