[자바스크립트, 백준] 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)

댓글()