본문 바로가기

백준/JavaScript

[JS] 백준 2차원 배열 - 마지막 이야기

728x90

 

 

오늘은 2차원 배열 단계 마지막 시간이다.

 

 

 

문제 2563번

https://www.acmicpc.net/problem/2563

 

2563번: 색종이

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록

www.acmicpc.net

 

문제를 보고 어떻게 겹치는 부분을 빼주지하고 고민하다가 풀이를 찾아보았다.

찾아보니 빼는 것이 아닌 2차원 배열을 만들어 채워나가는 것이 좋다고 한다.

먼저 배열을 만들어 0으로 채우고, 세로와 가로의 각 크기가 10이라고 했으니 이중 for문으로 10씩 반복해준다.

그리고 해당 위치의 요소가 0이라면 아직 채워지지 않았다는 뜻이니까 1로 만들고 카운트를 해준다. 만약 0이 아니라면 채워졌다는 뜻(겹친 부분)이기 때문에 countinue를 해서 넘어가준다.

마지막에 count를 출력하면 최종 크기가 나올 것이다.

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().split('\n');
let n = input.shift();
let paper = Array.from(Array(100), () => Array(100).fill(0));
let count = 0;
for(let i=0;i<n;i++){
    let x = Number(input[i].split(' ')[0]);
    let y = Number(input[i].split(' ')[1]);
    for(let j=0;j<10;j++){
        for(let w=0;w<10;w++){
            if(paper[x+j][y+w] === 0){
                paper[x+j][y+w] = 1;
                count++;
            } else{
                continue;
            }
        }
    }
}
console.log(count);

 

 

[참고] https://ggcoding.tistory.com/123
728x90