한 걸음씩

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

Programmers

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

winter17 2023. 7. 19. 11:52

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

 

프로그래머스

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

programmers.co.kr

풀이 과정

function solution(board) {
    const row = board.length // 행 길이
    const column = board[0].length // 열 길이
    
    // 행 길이와 열 길이에 맞춰 배열의 요소를 모두 true로 채우기
    const array = Array.from({length : row}, () => Array.from({length : column}, () => true))
    
    // 1을 기준으로 사각형 모양으로 인접하는 곳들은 false처리
    for (let i = 0; i < board.length; i++){
        for (let j = 0; j < board[i].length; j++){
            if (board[i][j] === 1){
                array[i][j] = false
                // if문으로 인덱스를 벗어나지 않도록 처리
                // i에서 빼는 경우에는 0보다 클 것 || i에서 더하는 경우는 row보다 작을 것
                // j에서 빼는 경우에는 0보다 클 것 || j에서 더하는 경우는 column보다 작을 것
                if (i - 1 >= 0) array[i - 1][j] = false;
                if (i + 1 < row) array[i + 1][j] = false;
                if (j - 1 >= 0) array[i][j - 1] = false;
                if (j + 1 < column) array[i][j + 1] = false;
                if (i - 1 >= 0 && j - 1 >= 0) array[i - 1][j - 1] = false;
                if (i - 1 >= 0 && j + 1 < column) array[i - 1][j + 1] = false;
                if (i + 1 < row && j - 1 >= 0) array[i + 1][j - 1] = false;
                if (i + 1 < row && j + 1 < column) array[i + 1][j + 1] = false;
            }
        }
    }
    
    // false 개수
    const countFalse = array.flat().filter(item => item === false).length
    return (row * column) - countFalse;
}

코드 설명은 주석에 ↑


리뷰

나만 이렇게 조건을 많이 달아서 통과한 건가 찜찜해서 다른 사람 풀이도 확인해 봤는데 비슷하게 푼 코드도 있었고

진짜 다양한 풀이들이 있다는걸 알았다