티스토리 뷰

https://www.acmicpc.net/problem/1780

 

1780번: 종이의 개수

N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수

www.acmicpc.net

 

 

재귀로 풀었음.

앞에 색종이 만들기랑 똑같은 문제인줄 알고 큐로 풀려고 했는데 메모리 초과가 나와서 재귀로 바꿨음.

 

const fs = require('fs');
const [n,...arr] = fs.readFileSync("./dev/stdin").toString().trim().split("\n");

const N = +n
const board = arr.map(v=>v.split(' ').map(v=>+v))


let answer = [0,0,0]
paper(0,0,N)

function paper(y,x,size){

  let first = board[y][x];
  let same = true;
  
  for(let i = y; i<y+size; i++){
    for(let j = x; j<x+size; j++){
      if(board[i][j]!=first) {
        same =false;
        break;
      }
    }
    if(!same)break;
  }
  
  if(same){
    answer[first+1]++;
  }else{
    paper(y,x,size/3)
    paper(y,x+size/3,size/3)
    paper(y+size/3,x+size/3*2,size/3)
    paper(y+size/3,x,size/3)
    paper(y+size/3,x+size/3,size/3)
    paper(y,x+size/3*2,size/3)
    paper(y+size/3*2,x,size/3)
    paper(y+size/3*2,x+size/3,size/3)
    paper(y+size/3*2,x+size/3*2,size/3)
  }
  return; 
}

console.log(answer.join('\n'))
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함