본문 바로가기
JS/백준

[백준JS] 2563. 색종이

by 박기린 2023. 3. 31.

안녕하세요. 박기린 입니다.

백준 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