연습장

62. 안전지대 본문

프로그래머스/0단계

62. 안전지대

js0616 2023. 8. 20. 17:54

Q.

 

 

 

문제 이해부터 해보자면

 

1번 예시

빈칸이 안전 지역이라고 생각하면된다. -> 16칸 

 

2번 예시

-> 13칸

 

3번 예시

-> 0 칸

 


 

배열의 크기는 1*1 부터 100*100 까지 이며 

 

지뢰에 대해서 주변이 모두 위험지역이 된다. 

 

1번 예시의 경우로 보면 

 

 

이렇게 본다면 어떨까? 

지뢰와 위험지역을 모두 1로 놓고

 

전체 지역의 크기 5*5 - (배열안 원소의 합) = 25 - 9 = 16 이 된다.

 

2번 예시의 경우

25 - 12 = 13 이 된다. 

 

그렇다면 어떻게 지뢰 주변 지역의 원소를 1로 만들 수 있을까 ? 

 

1. 먼저 지뢰가 어디있는지 찾고

2. 지뢰의 좌표보다 -1 , +1인 지역의 좌표를 1로 바꾸면 된다. 

 

위험지역의 값을 바꿀때는 board 의 범위를 벗어나지 않도록 

 

i 와 j 의 값을 잘 통제해야한다. 

 

 

코드는 다음과같다.

 

 

function solution(board) {
    var answer = 0;
    let boom_list = []
    let num = board.length
   
    // 지뢰 좌표 찾기
    for (let i = 0 ; i< num ; i++){
        for (let j = 0 ; j < num ; j++){
            if(board[i][j] == 1){
               boom_list.push([i,j])
            }
        }
    }
   
    // 지뢰 확인
    console.log(boom_list)
   
    // 지뢰 주변 위험지역 값 바꾸기
    for (boom of boom_list){
        for(let i = boom[0]-1 ; i <= boom[0]+1 ; i++){
            for(let j = boom[1]-1;j<=boom[1]+1; j++){
                if( i >=0 && j >= 0 && i< num && j < num ){
                    if (board[i][j] == 0){
                        board[i][j] = 1
                    }
                    else {  
                    }
                }    
            }
        }
    }
   
    // 바뀐 결과 확인
    console.log(board)

    // 위험지역 갯수 새기
    for (let i = 0 ; i< num ; i++){
        for (let j = 0 ; j < num ; j++){
            if(board[i][j] == 1){
               answer++
            }
        }
    }


    // 결과 처리
    answer = num * num - answer
    return answer;
}

 

 

'프로그래머스 > 0단계' 카테고리의 다른 글

64. 두 수의 합  (0) 2023.08.21
63. 정수를 나선형으로 배치하기  (0) 2023.08.21
61. 겹치는 선분의 길이  (0) 2023.08.20
60. 평행  (0) 2023.08.20
59. 이차원 배열 대각선 순회하기  (0) 2023.08.20