가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.
분명 점화식을 만들어 3중 for문의 사용을 지양하려고 했으나, 일단 문제가 분류된 카테고리 대로 2차원 배열로 풀이를 해보았다.
const input = require("fs")
.readFileSync(__dirname + "/input.txt")
.toString()
.trim()
.split("\n")
.map((x) => x.split(" ").map(Number));
let answer = 0;
let n = input.shift();
let xMax = -1;
let yMax = -1;
for (let i = 0; i < n; i++) {
xMax = Math.max(xMax, input[i][0] + 10);
yMax = Math.max(yMax, input[i][1] + 10);
}
let board = Array.from(Array(xMax), () => Array(yMax).fill(0));
for (let i = 0; i < n; i++) {
for (let j = input[i][0]; j < input[i][0] + 10; j++) {
for (let k = input[i][1]; k < input[i][1] + 10; k++) {
if (board[j][k] == 0) {
board[j][k] = 1;
answer++;
}
}
}
}
console.log(answer);