728x90
📌 문제
📌 입력
📌 출력
📌 예제 입출력
📌 풀이
알아야 하는 것
- 좌표로 접근할 때 상하좌우 + 대각선
- 주로 dx, dy로 상하좌우를 표현한다. 주의할 점은 그래프와 달리 배열에서 이런 변화량을 표현할 때 좌우는 -1, 0으로 우측으로 갈수록 +1이 되는 점은 똑같지만 상하일 때는 -1, 0으로 위로 갈수록 -1이 된다는 점이다.
- 그래서 [1, 0], [-1, 0], [0, -1], [0, 1] 이런 식으로 우측 이동, 좌측 이동, 위로 이동, 아래로 이동을 표현할 수 있다.
- 대각선도 비슷한데 예컨대 왼쪽 위를 향한 대각선이라고 하면 x축으로 좌측이니 -1, 위를 향했으면 y축으로 위쪽이니 -1로 [-1, -1] 이렇게 표현할 수 있다. 즉 반시계 방향으로 왼쪽 위부터 표현하자면 [-1, -1], [-1, 1], [1, 1], [1 -1] 이라고 할 수 있다.
구할 것
- 입력값 받기
- 첫 줄에 주어진 첫 번째 값, 게임판의 크기를 scale이라고 받고 두 번째 값을 target으로 받았다.
- target과 같은 수가 몇 개 있는지 세는 변수를 count, 구름의 개수는 cloudCount로 선언했다.
- 깃발 세우기
- 깃발은 구름이 없는 칸에만 세울 수 있다. 따라서 board를 가로세로 2중 for문으로 순회하면서 그 값이 0일 때 세운다.
- 만약에 board[i][j]가 0이라면, 여길 기준으로 상하좌우 대각선에는 뭐가 있는지 탐색한다.
- 위에서 말한 것처럼 상하좌우 대각선의 변화량을 현재 위치인 i, j에 각각 더해준다.
- 그렇게 계산한 값의 x축과 y축 모두 0보다 크거나 같고, scale보다는 작으며 board에서 값이 1일 경우(구름이 있을 경우) cloudCount++ 한다.
- 모두 계산한 후 cloudCount가 target과 같다면 count++ 한다.
const readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on('line', (line) => {
input.push(line);
if (input.lenght === Number(line.split(" ")[0])+1) {
rl.close();
}
});
rl.on('close', () => {
let [scale, target] = input.shift().split(" ").map(Number);
let board = [];
for (let i = 0; i < scale; i++) {
board.push(input[i].split(" ").map(Number))
}
let count = 0;
// 상하좌우 반시계방향
let dt = [[0, -1], [0, 1], [-1, 0], [1, 0], [-1, -1], [-1, 1], [1, 1], [1, -1]];
for (let i = 0; i < scale; i++) {
for (let j = 0; j < scale; j++) {
if (board[i][j] === 0) {
let cloudCount = 0;
for (let d = 0; d < 8; d++) {
const nx = i + dt[d][0];
const ny = j + dt[d][1];
if (nx >= 0 && ny >= 0 && nx < scale && ny < scale && board[nx][ny] === 1) {
cloudCount++
}
}
if (cloudCount === target) {
count++;
}
}
}
}
console.log(count)
})
깃발은 구름이 없는 칸에만 세울 수 있다는 걸 못 봐서 헤매고 있었다...
728x90
'⚙️ 코딩테스트' 카테고리의 다른 글
[JavaScript] 구름톤 챌린지 2주차 코딩테스트 : 폭탄 구현하기 (2) (0) | 2023.08.24 |
---|---|
[JavaScript] 구름톤 챌린지 2주차 코딩테스트 : 통증 (0) | 2023.08.23 |
[JavaScript] 구름톤 챌린지 2주차 코딩테스트 : 문자열 나누기 (0) | 2023.08.22 |
[JavaScript] 구름톤 챌린지 1주차 코딩테스트 : 이진수 정렬 (0) | 2023.08.21 |
[JavaScript] 구름톤 챌린지 1주차 코딩테스트 : 완벽한 햄버거 만들기 (0) | 2023.08.21 |