좌표 그림 있는 문제 처음 풀어봤다!!!
더보기

제한사항
입출력 예boardresult
입출력 예 설명
문제 설명
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.

지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.
제한사항
- board는 n * n 배열입니다.
- 1 ≤ n ≤ 100
- 지뢰는 1로 표시되어 있습니다.
- board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.
입출력 예boardresult
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]] | 16 |
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 1, 0], [0, 0, 0, 0, 0]] | 13 |
[[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1]] | 0 |
입출력 예 설명
입출력 예 #1
- (3, 2)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선 총 8칸은 위험지역입니다. 따라서 16을 return합니다.
입출력 예 #2
- (3, 2), (3, 3)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선은 위험지역입니다. 따라서 위험지역을 제외한 칸 수 13을 return합니다.
입출력 예 #3
- 모든 지역에 지뢰가 있으므로 안전지역은 없습니다. 따라서 0을 return합니다.
상하좌우대각선을 모두 체크해줘야 하는 것이 조금 어려웠다. 왜냐면 모서리에 위치한 경우에는 값이 없는 경우가 있었기 때문이다. 나는 조건을 모두 걸어서 값이 있을 때만 체크할 수 있도록 코드를 작성했는데, 이게 효율적인 방법인지는 잘 모르겠다.
function solution(board) {
let answer = 0;
let board_length = board.length**2;
for(let i=0; i<board.length; i++){
for (let j=0; j<board.length; j++){
if (isNearSafe(board, i,j) === true && board[i][j] === 0){
answer++;
}
}
}
return answer;
}
function isNearSafe (board, i, j) {
let near_arr = [];
if(i-1 >= 0){
let n = board[i-1][j];
near_arr.push(n);
}
if (j+1 < board.length){
let e = board[i][j+1];
near_arr.push(e);
}
if (j-1 >= 0){
let w = board[i][j-1];
near_arr.push(w);
}
if (i+1 < board.length){
let s = board[i+1][j];
near_arr.push(s);
}
if (i-1 >= 0 && j-1 >=0){
let nw = board[i-1][j-1];
near_arr.push(nw);
}
if (i-1 >= 0 && j+1 <board.length){
let ne = board[i-1][j+1];
near_arr.push(ne);
}
if (i+1 < board.length && j-1 >=0){
let sw = board[i+1][j-1];
near_arr.push(sw);
}
if (i+1 < board.length && j+1 < board.length){
let se = board[i+1][j+1];
near_arr.push(se);
}
// console.log(i,j,near_arr);
let cnt = 0;
near_arr.map((p) =>{
if(p === 1){
cnt++;
}
})
if (cnt === 0){
return true;
} else {
return false;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스 JS] 치킨 쿠폰 (0) | 2022.12.13 |
---|---|
[프로그래머스 JS] 등수 매기기 (0) | 2022.12.11 |
[프로그래머스 JS] 저주의 숫자 3 (0) | 2022.12.11 |
[프로그래머스 JS] 다항식 더하기 (0) | 2022.12.09 |
[프로그래머스 JS] 직사각형 넓이 구하기 / Math.max() Math.min() (0) | 2022.12.09 |