[자바스크립트, 백준] 2567 색종이 - 2
알고리즘/백준2023. 3. 14. 17:28
난이도 : 실버 4
링크 : https://www.acmicpc.net/problem/2567
문제리뷰
0으로 채워진 101 x 101 크기의 배열을 만들어 색종이가 차지한 부분은 1로 색칠했다.
상하좌우에 1이 3개 있다면 둘레 + 1
상하좌우에 1이 2개 있다면 둘레 + 2
아래 표를 보면 쉽게 이해할 수 있다.
0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
백준 같은 환경에서 input을 받는 법은 조금 더 연습해야 할 것 같다.
소스코드
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n")
// 색종이의 크기는 10x10
const n = input[0] // 색종이의 수
const arr = Array.from(Array(101), () => Array(101).fill(0)) // 101x101 배열 생성
const dx = [0, 0, -1, 1]
const dy = [-1, 1, 0, 0]
for (let i = 1; i <= n; i++) {
const inputArr = input[i].trim().split(" ")
const x = Number(inputArr[0])
const y = Number(inputArr[1])
for (let i=x; i < x+10; i++) {
for (let j=y; j < y+10; j++) {
arr[i][j] = 1
}
}
}
let result = 0
for (let i=1; i<101; i++) {
for (let j=1; j<101; j++) {
if (arr[i][j] === 1) {
let cnt = 0
for (let k=0; k<4; k++) {
const nx = i + dx[k]
const ny = j + dy[k]
if (arr[nx][ny] === 1) {
cnt += 1
}
}
if (cnt === 3) { // 상하좌우 3칸이 1로 채워져 있으면
result += 1
}
if (cnt === 2) { // 모서리
result += 2
}
}
}
}
console.log(result)
'알고리즘 > 백준' 카테고리의 다른 글
[자바스크립트, 백준] 2178 미로 탐색 (0) | 2023.03.17 |
---|---|
[자바스크립트, 백준] 10798 세로읽기 (0) | 2023.03.15 |
[자바스크립트, 백준] 9498 시험성적 (0) | 2023.03.13 |
[자바스크립트, 백준] 백준에서 자바스크립트로 알고리즘 푸는 방법 (0) | 2023.03.13 |
파이썬, 백준 18352, 특정 거리의 도시 찾기 (0) | 2022.11.11 |
댓글()