본문 바로가기
Javascript/자바스크립트 문제

[Javascript : programmers] 안전지대 (Lv.0) 💥

by isfp_yykkng 2024. 8. 31.

[Javascript : programmers] 안전지대 (Lv.0) 💥

 

문제

 

나의 정답 풀이

function solution(board) {
    let n = board.length;
    let danger = [[-1,0],[-1,1],[-1,-1],[0,1],[0,-1],[1,1],[1,0],[1,-1]];
    for(let i=0; i<n; i++){
        for(let j=0; j<n; j++){
            if(board[i][j]==1){
                danger.map(([x,y])=> {
                    if(x+i>=0 && x+i<n && y+j>=0 && y+j<n && board[x+i][y+j]==0) board[x+i][y+j] = 2; 
                });
            }
        }
    }
    return board.reduce((acc,cur)=>acc+=cur.filter(e=>e==0).length,0);
}

 

위험한 지역은 상하좌우, 대각선 모두 +1/-1 을 해줘야 하기 때문에 위험지역을 나타내는 8 구역을 2차원 배열로 저장한다.

n*n 의 board 배열을 이중 for문으로 돌면서 원소의 값이 1이라면, danger 배열을 map으로 돌면서 board의 인덱스 i, j 에 danger 좌표를 더한 인덱스가 0과 n-1 사이이고, 값이 0인 원소들을 2로 바꾼다.

 

이렇게 바꾼 board의 배열에서 0인 값의 개수를 세서 반환한다.