728x90
반응형
안전지대
※풀이
1. 보드의 크기인 n을 구합니다. board.length를 통해 구할 수 있습니다.
2. 위험 영역을 탐색하기 위해 상대적인 좌표 차이를 저장하는 d 배열을 생성합니다. 각 요소는 [행의 변화량, 열의 변화량]을 나타냅니다.
3. 위험 영역을 저장할 dangerZone이라는 빈 Set을 생성합니다.
4. 이중 반복문을 사용하여 보드를 탐색합니다.
· board[i][j] === 1인 경우, 현재 위치가 위험 영역임을 나타냅니다.
· d 배열의 각 요소에 대해서, 현재 위치에서 변화량을 더한 새로운 위치 [col, row]를 계산합니다.
· 새로운 위치 [col, row]가 보드 내에 있는 경우, 해당 위치를 dangerZone Set에 추가합니다.
5. n*n에서 dangerZone의 크기를 뺀 값을 반환합니다.
ex1)
{
function solution(board) {
const n = board.length
const d = [
[0, 0],
[0, 1],
[0, -1],
[1, 1],
[1, 0],
[1, -1],
[-1, -1],
[-1, 0],
[-1, 1],
]
let dangerZone = new Set()
for (let i = 0; i < n; i++){
for (let j = 0; j < n; j++){
if (board[i][j] === 1){
d.forEach(v =>{
let [col, row] = [i + v[0], j + v[1]]
if (col >= 0 && col < n && row >=0 && row < n){
dangerZone.add(col + " " + row)
}
})
}
}
}
return n*n - dangerZone.size
}
console.log(solution([[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
}
ex2)
{
function solution(board) {
const n = board.length
const d = [
[0, 0],
[0, 1],
[0, -1],
[1, 1],
[1, 0],
[1, -1],
[-1, -1],
[-1, 0],
[-1, 1],
]
let dangerZone = new Set()
for (let i = 0; i < n; i++){
for (let j = 0; j < n; j++){
if (board[i][j] === 1){
d.forEach(v =>{
let [col, row] = [i + v[0], j + v[1]]
if (col >= 0 && col < n && row >=0 && row < n){
dangerZone.add(col + " " + row)
}
})
}
}
}
return n*n - dangerZone.size
}
console.log(solution([[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. 길이가 200인 배열 line을 생성하고 모든 요소를 0으로 초기화합니다. 이 배열은 -100부터 99까지의 인덱스를 가지며, 각 인덱스는 해당 위치에서 겹치는 직선들의 개수를 나타냅니다.
2. lines 배열을 순회하면서 각 직선의 범위에 대해 작업을 수행합니다.
· 시작점 min부터 끝점 max 직전까지 반복문을 실행합니다.
· line[min+100]의 값을 1 증가시킵니다. 이는 현재 위치 min에서 직선과 겹치는 개수를 나타냅니다.
3. line 배열에서 값이 1보다 큰 요소들을 필터링하고, 그 개수를 반환합니다.
ex1)
{
function solution(lines) {
let line = new Array(200).fill(0)
lines.forEach(([min, max]) => {
for (; min < max; min++){
line[min+100]++
}
})
return line.filter(v => v > 1).length;
}
console.log(solution([[0, 1], [2, 5], [3, 9]]));
//2
}
ex2)
{
function solution(lines) {
let line = new Array(200).fill(0)
lines.forEach(([min, max]) => {
for (; min < max; min++){
line[min+100]++
}
})
return line.filter(v => v > 1).length;
}
console.log(solution([[-1, 1], [1, 3], [3, 9]]));
//0
}