문제
- N과 K, N x N 행렬이 주어진다.
- N은 행렬의 좌우 길이이고, K는 찾고자 하는 특정 숫자이다.
- N x N 행렬에는 구름이 무작위로 생성된다. 구름은 1로 표시되고, 구름이 없으면 0으로 표시된다.
- 행렬의 각 요소를 모두 순회하되, 구름이 없는 행렬의 상하좌우, 대각선 8칸에 구름이 몇개 있는지를 체크하여
주변 구름 갯수가 K개와 같다면 카운트를 1 증가시킨다. - 최종적으로 카운트를 리턴한다.
코드
const readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on('line', (line) => {
input.push(line.trim())
}).on('close', () => {
const [N, K] = input.shift().split(" ").map(n => +n)
const matrix = input.map(e => e.split(" ").map(n => +n))
let result = 0
// dx,dy 기법을 위한 좌표 선언
const DIR_ARR = [
[-1, -1],
[-1, 0],
[-1, 1],
[0, -1],
[0, 1],
[1, -1],
[1, 0],
[1, 1]
]
for (let i = 0; i < N; i++) {
for (let j = 0; j < N; j++) {
if (matrix[i][j] === 1) continue
let count = 0
for (let DIR of DIR_ARR) {
let y = i + DIR[0]
let x = j + DIR[1]
if (y < N && y >= 0 && x < N && x >= 0) {
matrix[y][x] === 1 ? count++ : null
}
}
if (count === K) result++
}
}
console.log(result)
})
DX/DY 기법
DX/DY 기법은 2차원 배열에서 사용되는 기법으로써 현재 자신의 위치에서 상하좌우, 대각선 방향으로 이동이나 탐색을 구현할 때 사용한다.
이동의 중심은 항상 현재위치이므로, 현재 위치에서 방향 인덱스를 만들어 사용한다.
단, 배열 내 length에 못미치거나 초과하는 경우가 있을 수 있으므로, 예외사항을 계산하고 사용해야 한다.
'코테 문제 풀이' 카테고리의 다른 글
[Node.js] 구름톤 챌린지 2주 Day4 풀이 (폭탄 구현하기(2)) (0) | 2023.08.27 |
---|---|
[Node.js] 구름톤 챌린지 2주 Day3 풀이 (통증) (0) | 2023.08.27 |
[Node.js] 구름톤 챌린지 2주 Day1 풀이 (0) | 2023.08.21 |
[Node.js] 구름톤 챌린지 1주 Day5 풀이 (0) | 2023.08.18 |
[Node.js] 구름톤 챌린지 1주 Day3 풀이 (0) | 2023.08.16 |