백준/실버
[백준] 실버1-쿼드트리 C++ 1992번
taene_
2025. 2. 23. 13:45
https://www.acmicpc.net/problem/1992
1. 첫번째 답
#include <iostream>
#include <vector>
using namespace std;
int N;
vector<string> temp;
int check(int size, int startY, int startX)
{
char k = temp[startY][startX];
for (int i = startY; i < startY + size; i++)
{
for (int j = startX; j < startX + size; j++)
{
if (temp[i][j] != k)
return 2;
}
}
return (k - '0');
}
void recur(int size, int startY, int startX)
{
cout << "(";
for (int i = startY; i < startY + size; i += size / 2)
{
for (int j = startX; j < startX + size; j += size / 2)
{
int chk = check(size / 2, i, j);
if (chk == 2)
{
recur(size / 2, i, j);
cout << ")";
}
else
cout << chk;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> N;
for (int i = 0; i < N; i++)
{
string t;
cin >> t;
temp.push_back(t);
}
int answer = check(N, 0, 0);
if (answer == 2)
{
recur(N, 0, 0);
cout << ")";
}
else
{
cout << answer;
}
return 0;
}
2. 두번째 답
#include <iostream>
#include <vector>
using namespace std;
int N;
vector<string> temp;
string recur(int size, int y, int x)
{
// if (size == 1) return string(1, temp[y][x]);
string ret = "";
char k = temp[y][x];
for (int i = y; i < y + size; i++)
{
for (int j = x; j < x + size; j++)
{
if (k != temp[i][j])
{
ret += "(";
ret += recur(size / 2, y, x);
ret += recur(size / 2, y, x + size / 2);
ret += recur(size / 2, y + size / 2, x);
ret += recur(size / 2, y + size / 2, x + size / 2);
ret += ")";
return ret;
}
}
}
return string(1, k);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> N;
for (int i = 0; i < N; i++)
{
string t;
cin >> t;
temp.push_back(t);
}
cout << recur(N, 0, 0);
return 0;
}