이 문제는 크게 어렵지 않았다. 그냥 전형적인 재귀함수 문제였다.
작은 예제부터 천천히 생각해본다면 쉽게 해결할수있었다.
모든 사분면이 같은 숫자면 그 숫자 출력하고 아니면 하나씩 분리해서 출력한다.
2x2일때부터 생각해보면 쉽게 할수있다.
단, 입력받을때 string으로 받고 하나씩 넣어줘야하는 불편함이 있으니 주의해야한다.
#include <iostream>
using namespace std;
int board[64][64];
void dfs(int N, int x, int y){
int ao=0;
int az=0;
if(N==1){
cout<<board[x][y];
return ;
}
for(int i=x;i<x+N;i++){
for(int j=y;j<y+N;j++){
if(board[i][j]==1){
ao++;
}
else{
az++;
}
}
}
if(ao==N*N){
cout<<1;
}
else if(az==N*N){
cout<<0;
}
else{
cout<<"(";
dfs(N/2,x,y);
dfs(N/2,x,y+N/2);
dfs(N/2,x+N/2,y);
dfs(N/2,x+N/2,y+N/2);
cout<<")";
}
}
int main(){
int N;
string str;
cin>>N;
for(int i=0;i<N;i++){
cin>>str;
for(int j=0;j<N;j++){
board[i][j]=str[j]-'0';
}
}
dfs(N,0,0);
return 0;
}
'Development > BOJ' 카테고리의 다른 글
[BOJ] 백준 9095번 : 1, 2, 3 더하기 C++ : 아주정은 (0) | 2021.04.19 |
---|---|
[BOJ] 백준 20055번: 컨베이어 벨트 위의 로봇 C++ : 아주정은 (0) | 2020.10.21 |
[BOJ] 백준 19237번 : 어른 상어 C++ : 아주정은 (0) | 2020.10.17 |
[BOJ] 백준 15683번 : 감시 C++ : 아주정은 (0) | 2020.10.17 |
[BOJ] 백준 19236번 : 청소년 상어 C++ : 아주정은 (0) | 2020.10.16 |