반응형
문제 : https://www.acmicpc.net/problem/1992
풀이
2630번 문제에서 입력과 출력부분을 수정 했다.
2630 : https://hydroponicglass.tistory.com/58
입력을 개별 정수를 라인으로 입력받도록 수정하고
4개로 분할을 시작할때 여는 괄호를, 분할을 끝날때 닫는 괄호를 출력한다.
또한 분할된 표는 각 셀을 전수조사해서 전부 0이면 0을 출력, 전부 1이면 1을 출력한다.
구현
//c++
#pragma warning (disable: 4996)
#include <iostream>
#include <cstdio>
int map[65][65];
void divide(int x1, int y1, int x2, int y2) {
int zero = 0;
int one = 0;
for (int i = y1; i <= y2; i++) {
for (int j = x1; j <= x2; j++) {
if (map[i][j] == 1) one++;
else zero++;
}
}
if (zero == 0) {
std::cout << 1;
}
else if (one == 0) {
std::cout << 0;
}
else {
std::cout << "(";
divide(x1, y1, (x1+x2)/2, (y1+y2)/2); //1
divide((x1+x2)/2+1, y1, x2, (y1+y2)/2); //2
divide(x1, (y1+y2)/2+1, (x1+x2)/2, y2); //3
divide((x1+x2)/2+1, (y1+y2)/2+1, x2, y2); //4
std::cout << ")";
}
return;
}
int main() {
int n;
std::cin >> n;
for (int i = 0; i < n; i++) {
char x[65];
scanf("%s", &x);
for (int j = 0; j < n; j++) map[i][j] = (int)x[j]-'0';
}
divide(0, 0, n-1, n-1);
}
최근댓글