문제
- N x N 크기의 행렬이 주어진다. 행렬은 땅의 상태로 채워진다.
- 행렬의 각 좌표에는 폭탄이 떨어지는데, 폭탄은 땅의 상태에 비례하여 점수가 계산된다.
- 폭탄 좌표에 해당하는 땅의 상태가 @일 경우 해당 행렬 위치의 폭탄값은 2씩 증가한다.
- 폭탄 좌표에 해당하는 땅의 상태가 0일 경우 해당 행렬 위치의 폭탄값은 1씩 증가한다.
- 폭탄 좌표에 해당하는 땅의 상태가 #일 경우 해당 행렬 위치의 폭탄값 계산은 무시된다.
- 최초 폭탄값은 모두 0이고, N x N 행렬로 제작된다.
코드
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.slice(0, N).map(e => e.split(" ").map(n => n))
const bombCoord = input.slice(N).map(e => e.split(" ").map(n => +n))
const sheet = Array.from(Array(N), () => Array(N).fill(0))
const DIR_ARR = [
[-1, 0],
[0, -1],
[0, 0],
[0, 1],
[1, 0]
]
bombCoord.forEach((coord) => {
const [y, x] = coord
DIR_ARR.forEach((DIR) => {
const dy = y + DIR[0] - 1
const dx = x + DIR[1] - 1
if (dy < N && dy >= 0 && dx < N && dx >= 0 && matrix[dy][dx] !== "#") {
if (matrix[dy][dx] === '@') sheet[dy][dx] += 2
if (matrix[dy][dx] === '0') sheet[dy][dx] += 1
}
})
})
console.log(Math.max(...sheet.flat()))
})
- 처음에는 땅의 상태와 폭탄값을 하나의 행렬에 모두 넣었었는데, 코드의 가독성이 정말 끔찍했다.
- 땅의 상태와 폭탄 값을 별도의 행렬로 만들어 값을 계산하는 것이 가장 좋은 방법인 듯 하다.
행렬 문제(DX/DY 기법)
DX/DY 기법을 알고나서 행렬 문제를 푸는 것이 많이 쉬워졌다.
폭탄이 특정 위치에 떨어졌을때 폭탄이 영향이 미치는 곳은 그 좌표의 위치와 상하좌우 이므로, 해당 좌표 위치의 인덱스를 기준으로 인덱스를 만들어 문제를 해결하자.
'코테 문제 풀이' 카테고리의 다른 글
[Node.js] 구름톤 챌린지 3주 Day1 풀이 (통증 (2)) (0) | 2023.08.31 |
---|---|
[Node.js] 구름톤 챌린지 2주 Day5 풀이 (GameJam) (0) | 2023.08.27 |
[Node.js] 구름톤 챌린지 2주 Day3 풀이 (통증) (0) | 2023.08.27 |
[Node.js] 구름톤 챌린지 2주 Day2 풀이 (구름 찾기 깃발) (0) | 2023.08.27 |
[Node.js] 구름톤 챌린지 2주 Day1 풀이 (0) | 2023.08.21 |