[백준 알고리즘] Node.js 1531. 투명
              
          2023. 8. 10. 14:58ㆍ코딩연습
1. 문제
https://www.acmicpc.net/problem/1531
1531번: 투명
첫째 줄에 N과 M이 주어진다. N은 0보다 크거나 같고, 50보다 작거나 같다. M은 0보다 크거나 같고, 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 종이의 좌표가 주어진다. 왼쪽 아래 모서리의 x, y좌
www.acmicpc.net
2. 풀이
- 100 * 100 크기의 그림을 가지고 있고, 1 * 1 크기의 종이로 모자이크 처리한다.
 - 불투명한 종이로 그림을 가리지만, M개 이하의 종이가 올려져 있으면 그 부분은 보이는 부분이다.
 
const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
// 모자이크하는 N개의 종이와 보이게 되는 종이의 수 M
const [N,M] = inputs[0].split(" ").map(v => +v);
// 그림의 크기는 100 * 100 고정, 가려질 곳을 표시할 배열.
const picture = Array.from({length : 101}, () => Array(101).fill(0));
// 종이 N 번 만큼 반복
for(let i = 1; i <= N; i++){
	// N번의 줄에 좌표 설정.
    const [startX, startY, endX, endY] = inputs[i].split(" ").map(v => +v);
    
    // 해당 좌표에 가려지는 회수 표시.
    for(let j = startX; j <= endX; j++){
        for(let k = startY; k <= endY; k++){
            picture[j][k]++;
        }
    }
}
let answer = 0;
// 그림의 크기만큼 반복시키면서
for(let i = 1; i <= 100; i++){
    for(let j = 1; j <= 100; j++){
    	// 만약 해당 좌표의 숫자가 M 보다 크다면 answer 증가
        if(picture[i][j] > M) answer++;
    }
}
console.log(answer)
3. 정리
- 문제를 이해하는데 시간이 걸렸다.
 - 종이를 겹쳐서 가린다고 생각했고, 겹친 부분이 M 보다 작다면 그 부분은 보이게 된다는 뜻이었고, 보이지 않게 되는 부분만을 카운트해주면 되는 간단한 문제였다.
 
'코딩연습' 카테고리의 다른 글
| [프로그래머스] 주식 가격 - JavaScript (0) | 2023.08.21 | 
|---|---|
| [프로그래머스] 더 맵게 - JavaScript (0) | 2023.08.18 | 
| [백준 알고리즘] Node.js 1439. 뒤집기 (0) | 2023.08.10 | 
| [백준 알고리즘] Node.js 1417. 국회의원 선거 (0) | 2023.08.07 | 
| [프로그래머스] 주차 요금 계산 (0) | 2023.08.07 |