728x90
문제 설명
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.
제한사항
- board는 n * n 배열입니다.
- 1 ≤ n ≤ 100
- 지뢰는 1로 표시되어 있습니다.
- board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.
입출력 예
board | result |
[[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) {
var arr = [];
var height = board.length;
var width = height;
// 1의 위치 확인
// 1 주변의 것이 배열의 범위를 벗어나는지 확인
for (let x = 0; x < height; x++) {
var element = board[x];
for (let y = 0; y < width; y++) {
var value = element[y];
if (value != 1) continue;
GetBombs(x, y, board).map((ele) => {
arr.push(ele);
});
}
}
function removeDup(arr) {
return [...new Set(arr.join("|").split("|"))]
.map((v) => v.split(","))
.map((v) => v.map((a) => +a));
}
return height * width - (arr.length == 0 ? 0 : removeDup(arr).length);
}
function GetBombs(x, y, board) {
var arr = [];
for (let xValue = x - 1; xValue <= x + 1; xValue++) {
if (xValue < 0 || xValue > board.length) continue;
for (let yValue = y - 1; yValue <= y + 1; yValue++) {
if (yValue < 0 || yValue > board[0].length) continue;
var value = board?.[xValue]?.[yValue];
if (value == undefined) continue;
arr.push([xValue, yValue]);
}
}
return arr;
}
풀이
위험지역을 구한다.
중복된 위험지역을 제외하고 위험지역 갯수를 구한다.
전체 지역의 갯수에서 위험지역 갯수를 뺀다.
[출처]
https://school.programmers.co.kr/learn/courses/30/lessons/120866
728x90
'코딩테스트' 카테고리의 다른 글
[JS] K번째수 (0) | 2024.02.20 |
---|---|
[JS] 컨트롤 제트 (0) | 2024.02.20 |
[JS] 평행 (0) | 2024.02.20 |
[JS] 문자열 겹쳐쓰기 (0) | 2024.02.20 |
[JS] 최소직사각형 (1) | 2024.02.20 |