[백준 알고리즘] 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 |