안녕하세요. 박기린 입니다.
백준 2563번 색종이 문제를 풀어봅시다.
문제 링크
https://www.acmicpc.net/problem/2563
문제 해석
1. 100 x 100 사이즈의 도화지가 주어집니다.
2. 색종이가 여러 장이 주어지는데, 모두 10 x 10 사이즈입니다.
3. 색종이가 서로 겹처서 놓아지는 경우가 존재합니다. 그럴 경우 '색종이가 붙은 검은 영역의 넓이'를 구할 때, 겹치는 부분의 넓이도 고려를 해야 합니다.
이 문제는 100 x 100 사이즈의 2차원 배열을 만든 후, 색종이가 놓일 부분의 인덱스를 구해서, 총 인덱스의 개수를 알면 문제가 쉽게 해결이 됩니다.
정답 코드
const fs = require("fs");
const [amount, ...papers] = fs
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const whiteBoard = Array.from(Array(100), () => new Array(100).fill(false));
let trues = 0;
const length = 10;
papers.forEach((e) => {
const [x, y] = e.split(" ").map((e) => +e);
for (let i = x; i < x + length; i++) {
for (let j = y; j < y + length; j++) {
whiteBoard[i][j] = true;
}
}
});
whiteBoard.forEach((e) => {
e.forEach((ee) => {
if (ee === true) trues++;
});
});
console.log(trues);
정답 코드 풀이
const fs = require("fs");
const [amount, ...papers] = fs
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const whiteBoard = Array.from(Array(100), () => new Array(100).fill(false));
let trues = 0;
const length = 10;
amount : 입력의 첫째 줄로, 색종이의 갯수입니다.
papers : 입력의 둘째 줄 이후의 모든 줄로, 색종이의 좌측 하단 꼭짓점의 좌표를 담고 있는 array 입니다.
whiteBoard : '100개의 요소를 가지는 Array에, 각 요소가 100개의 false를 지닌 Array를 담는다.' 라는 의미로, 요약하자면 100 x 100 사이즈의 2차원 배열을 만든 후, 그 안에 전부 false를 집어넣는다는 의미입니다.
trues : 2차원 배열 중, 총 true의 갯수가 담길 변수입니다.
length : 색종이의 한 변의 길이인 10이 담긴 상수입니다.
papers.forEach((e) => {
const [x, y] = e.split(" ").map((e) => +e);
for (let i = x; i < x + length; i++) {
for (let j = y; j < y + length; j++) {
whiteBoard[i][j] = true;
}
}
});
papers Array에 담긴 입력 strings를 <x, y>로 비구조화 합니다.
forEach()를 이용해서 papers Array의 모든 요소에 접근합니다.
각 요소에는, 이중 for문을 이용해서 [ x 부터 x + length ][ y 부터 y + length ] 까지 모두 true를 담아줍니다.
색종이끼리 겹친 부분이 있어도, 어차피 true에 true를 넣는 것일 뿐이라 문제가 생기지 않습니다.
whiteBoard.forEach((e) => {
e.forEach((ee) => {
if (ee === true) trues++;
});
});
console.log(trues);
whiteBoard의 모든 요소에 접근하기 위해, 이중 forEach()를 사용합니다.
해당 인덱스에 true가 담겨있으면, trues 변수에 +1을 합니다.
그리고 trues 변수를 출력하면 됩니다.
'JS > 백준' 카테고리의 다른 글
[백준JS] 11005. 진법 변환 2 (0) | 2023.04.04 |
---|---|
[백준JS] 2745. 진법 변환 (0) | 2023.04.01 |
[백준JS] 1316. 그룹 단어 체커 (0) | 2023.03.24 |
[백준JS] 10812. 바구니 순서 바꾸기 (0) | 2023.03.18 |
[백준JS] 10809. 알파벳 찾기 (0) | 2023.03.17 |