[백준1780_자바스크립트(javascript)] - 종이의 개수

경이·2024년 6월 3일

𝑩𝑶𝑱 (𝒋𝒔)

목록 보기
55/325

🔴 문제

종이의 개수


🟡 Sol

const fs = require('fs');
const path = process.platform === 'linux' ? '/dev/stdin' : 'Wiki\\input.txt';
const [N, ...inputs] = fs.readFileSync(path).toString().trim().split('\r\n');
const n = Number(N);
const input = inputs.map((it) => it.split(' '));

const answer = [0, 0, 0];

function checkPapar(x, y, n) {
  const target = input[x][y];

  for (let i = x; i < x + n; i++) {
    for (let j = y; j < y + n; j++) {
      if (target !== input[i][j]) return false;
    }
  }
  return true;
}

function recursive(x, y, n) {
  if (checkPapar(x, y, n)) {
    answer[Number(input[x][y]) + 1] += 1;
    return;
  }
  for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 3; j++) {
      recursive(x + i * (n / 3), y + j * (n / 3), n / 3);
    }
  }
}

recursive(0, 0, n);

answer.forEach((it) => console.log(it));


🟢 풀이

어려워서 보고 푼 문제,,,, ㅠ
만약 종이 안에 써진 숫자가 다르다면 계속 9등분해서 확인해줘야 하므로 재귀함수로 구현해준다.
그 전에 종이 안에 써진 숫자가 같은지 아닌지 확인하는 checkPaper 함수를 만들어준다.
재귀함수에서는 사용할 수 있는 종이라면 재귀호출을 하지 않고 그 종이를 이룬 숫자가 무엇인지 체크해 answer의 크기를 증가해준다.
만약 사용할 수 없는 종이라면 9등분해서 다시 재귀호출을 해야하는데 for문을 중첩으로 사용해 종이의 시작좌표와 종이의 크기를 같이 전달하여 재귀호출한다.


🔵 Ref

https://zidarn87.tistory.com/385

profile
록타르오가르

0개의 댓글