[백준] 2563번 - 색종이 (node.js)
솔직히 문제를 보자마자 ㄷㄷㄷ했었다가,
좀 생각을 해보니 충분히 풀 수 있는 문제라고 생각했습니다.
중복되는 너비를 찾아서 전체너비에서 빼면 될거라 생각하여,
재귀함수를 만들어서 중복되는 부분을 찾아보려고 시도했다가 이 방식이 아닌것 같아서
후퇴했다가.. 포기하고 다른분들의 답안지를 보았습니다.
그런데 역시나 제 방향성이 달랐던거 같더라구요.
이 문제도 2차원 배열로 푸는 문제였습니다...;;
전체 도화지 크기 즉 100 * 100의 2차 배열을 구하고,
거기에서 색종이의 너비를 점으로 표시하듯해서 구하게되면 중복없이
너비를 구할 수 있었습니다.
하.. 똑똑한 사람 참 많다!
문제
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.
예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.
입력
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다
출력
첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.
문제풀이
위에서 미리 언급했었지만
이 색종이 문제도 2차원 배열로 푸는 문제였습니다.
세로, 가로 길이를 구해서 너비를 구하는 식이 아니라,
도화지를 100 * 100인 2차원 배열로 보고 그안에 색종이의 크기만큼 점을 찍듯 표시하고
해당 넓이를 구하는 문제였습니다.
const fs = require("fs");
const [cnt, ...arr] = fs
.readFileSync("input.txt")
.toString()
.trim()
.split(/\r?\n/);
const solution = () => {
const tatalArr = Array.from({length: 100}, () => Array(100).fill(0)); // 도화지 전체크기
const numArr = arr.map(d => d.split(' ').map(v => parseInt(v))); // 색종이 정보
let result = 0
for (let i = 0; i < cnt; i++) { // 색종이 갯수만큼 루프 돌리고
const row = numArr[i][0]; // 각각 색종이 정보에서 첫 점 정보를 가져온다. 1
const cell = numArr[i][1]; // 각각 색종이 정보에서 첫 점 정보를 가져온다. 2
for (let j = row; j < row + 10; j++) { // 그 점들을 도화지에다가 너비만큼 찍는다 (10 * 10)
for (let k = cell; k < cell + 10; k++) {
if (tatalArr[j][k]) continue; // 이미 찍은 부분은 넘어가고
tatalArr[j][k]++; // 안직은 부분만 1을 추가해주면 중복 피할 수 있다.
// result++; // 여기서 바로 result도 같이 더해줘서 답을 구할 수 도 있고.
}
}
}
for (let i = 0; i < 100; i++) {
for (let j = 0; j< 100; j++) {
if (tatalArr[i][j]) result++; // 이런식으로 채워진 도화지에서 구할 수도 있다.
}
}
}
solution();
참조!
https://ggcoding.tistory.com/123
'코딩 테스트' 카테고리의 다른 글
[백준] 2292번 - 벌집 (node.js) (1) | 2024.04.25 |
---|---|
[백준] 2903번 - 중앙 이동 알고리즘 (node.js) (0) | 2024.04.23 |
[백준] 1316번 - 그룹 단어 체커 (node.js) (0) | 2024.04.18 |
[백준] 2444번 - 별 찍기 - 7 (node.js) (0) | 2024.04.17 |
[백준] 1157번 - 단어 공부 (node.js) (0) | 2024.04.17 |
댓글