연습장
62. 안전지대 본문
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 |