: ๋ถํ ์ ๋ณต์ด๊ณ , ์ฌ๊ท๋ฅผ ํตํด ์ ๊ทผํ๋ ๊ฒ์ ๋ง์์ง๋ง,
๋์น ๋ถ๋ถ์ด ์๋ค.
์ฒ์ ๋ค์ด๊ฐ์๋ง์ 4๋ถํ ๋ก ๋๋ ๊ฐ๋ฉด์ ํ๊ธฐ๋ณด๋ค๋
๋ชจ๋ ์์๊ฐ 1์ด๋ผ๊ณ ํ๋ค๋ฉด, ๊ตณ์ด 4๋ถํ ๋ก ๋๋ ์ ์งํํ ํ์๊ฐ ์๋ค.
-> ์คํ๋ ค 4๋ถํ ์งํํ๊ฒ ๋๋ฉด, ๋ฉ๋ชจ๋ฆฌ๋ถ์กฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์์ ์ค๋ช
์ ์ ์ํ๋ฉด์ ์ฝ๋ ์์ฑํ๋ฉด ๋๋ค.
: ๋ถํ ์ ๋ณตํ๊ธฐ ์ ์, ๊ตณ์ด ๋ถํ ์ ๋ณต์ ํด์ผํ๋๊ฑด๊ฐ? ์๊ฐ์ ํ๊ณ ์งํํ์.
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
#include <string>
#include <tuple>
#include <map>
#include <stack>
#include <queue>
vector<vector<string>> v;
string gogo(int _y , int _x , int _size)
{
if (_size == 1)
{
//cout << v[_y][_x];
return v[_y][_x];
}
cout << '(';
string s1 = gogo(_y, _x, _size / 2);
string s2 = gogo(_y, _x + _size / 2, _size / 2);
string s3 = gogo(_y + _size / 2, _x, _size / 2);
string s4 = gogo(_y + _size / 2,
_x + _size / 2, _size / 2);
//if(s1 == s2 == s3 == s4)
//{
//
//}
//else
//{
// cout << s1 << s2 << s3 << s4;
//}
cout << ')';
}
int main()
{
int n;
cin >> n;
v.resize(n, vector<string>(n));
for (int i = 0; i < n; ++i)
{
string s;
cin >> s;
for (int j = 0; j < n; ++j)
{
v[i][j] = s[j];
}
}
gogo(0, 0, n);
// 4๋ฑ๋ถ์ผ๋ก ์๊ฒ์๊ฒ ์งํ
// ๊ทธ๋ฌ๋ค๊ฐ ๋ฒ์์ฐจ์ด๊ฐ 1์ด ๋ฐ์ํ ๋ ๋ฆฌํด ์ฒ๋ฆฌ
// ๊ทธ๋ฐ๋ฐ ๊ฐ์ฅ ์์ ๋ฒ์ ์ฒ๋ฆฌ ํ์๋
// 4๋ฑ๋ถ ์ฌ๊ท ๋๋ฆฌ๋ ํจ์ ์ชฝ์์๋
// ๋น๊ต๋ฅผ ํด์ผ ํ๋ค.
// ์๋์ฒ๋ผ 4๊ฐ์ฉ ๋ฐ๋ ์ฉ์ผ๋ก ๊ฐ์.
// ํ๋๋ผ๋ ์ํ์ข์ฐ 4์์ด ๋ชจ๋ ๋์ผํด์ผ ์์ถ ๊ฐ๋ฅ.
// string s1 = go()
// string s2 = go()
// string s3 = go()
// ๋ณ๊ฒฝ๋๋ ์ธ์์ ์ ๋ณด๋ ์์๋๋ x,y ์ธ๋ฑ์ค
// ์ฌ์ด์ฆ???
}
: 240314 : ์ผ๋จ ๋ชปํ์๊ณ ,
๊ฐ์ ์๊ฐ ํ ๋ค์ ๋์ .
https://rightbellboy.tistory.com/142
go(4) -> go(3) -> go(2) -> go(1)
ํด๋น ๋ฌธ์ ์ ๊ฒฝ์ฐ, ์ ์ฒด 8x8 ์์ 4๋ฑ๋ถ์ผ๋ก ๋๋์.
๊ทธ๋ฐ๋ฐ ๋ 4๋ฑ๋ถ์ผ๋ก ๋๋๋ค. ๋ ๋~~
-> ๊ทธ๋ฐ๋ฐ ๋ฌ๋ผ์ง๋ ๋ถ๋ถ์ ์๋ค. ๋ฑ๋ถํ๋ฉด์ ์ size๊ฐ ์ถ์๋๊ณ ์๋ค.
-> ์์ํ๋ ์ธ๋ฑ์ค์ ๋๋๋ ์ธ๋ฑ์ค๋ ๋ฌ๋ผ์ง๊ณ ์๋ค.
๊ทธ๋ฐ๋ฐ 4๋ฑ๋ถํ๋ ๋ก์ง์ ๋ชจ๋ ๋์ผํ๊ธฐ ๋๋ฌธ์
๊ฒฐ๋ก ์ ์ผ๋ก ์ฌ๊ท๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ์ ๊ทผํด์ผ ๊ฒ ๋ค๋ ์๊ฐ์ ํ ์ ์์ด์ผ ํ๋ค.
go() ํจ์ ๋ด๋ถ์์ 4๋ฑ๋ถ์ ๋ฐ๋ณตํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
go() -> go() 4๋ฒ์ ํธ์ถํ์.
๊ทธ๋ฐ๋ฐ startIndex, endIndex , size ์ธ๋ฐ endIndex์ ๊ฒฝ์ฐ๋ startIndex ์ size ๋ง์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค..
startIndex ๋ ์ฌ๊ธฐ์์ ๊ฒฝ์ฐ x, y ์ขํ ๋๊ฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
: ์์ญ์ ๋ถํ ํ๊ณ , ์ ๋ณตํ๋ ๋ฐฉ์์ผ๋ก ์๊ฐํ๋ ๊ฒ์ด ์ง๊ด์ ์.
์์ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ํด์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ด์ ๊ฐ์.
์ฝ๋ ํํ
dfs(int x ,int y , int size)
{
// ์กฐ์ ์์ ์ผ๋จ ๋ชจ๋ฆ.
dfs(x, y, size / 2); // ์ด๋ก์ ๋ถ๋ถ.
dfs(x + size / 2, y, size / 2); // ๋นจ๊ฐ์ ๋ถ๋ถ.
dfs(x, y + size / 2, size / 2); // ์ฃผํฉ์ ๋ถ๋ถ.
dfs(x + size / 2, y + size / 2, size / 2); // ํ๋์ ๋ถ๋ถ.
}
์ธ์ ๋ถํ ํด์ผ ํ ๊น? ๋ถํ ์ํด๋ ๋จ? ์ ์๊ฐํ์.
: ์ผ์ , ์ฐ์ , ์ผํ, ์ฐํ ๋ก ์ธ์ ํ ์ ์ ์ ๋ํด์ ๋์ผํ ๊ฐ์ด๋ผ๋ฉด
๋์ผํ ๊ฐ ํ๊ฐ๋ก ๋ํ๋ด๋ฉด ๋จ.
์ฌ๊ธฐ์๋ 8์นธ์ด ๋ชจ๋ ๋์ผํ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ 0์.
์ฌ๊ธฐ์๋ 0011 ์ธ๋ฐ..
์ฌ๊ธฐ์๋ 0000 ์ด ์๋๋ผ ๋์ผํ ๊ฐ์ด 0์ด๋ฏ๋ก, 0์ผ๋ก ํํ ํ ์ ์์.
์ฆ, ์ฌ๊ฐํ ์ฌ์ด์ฆ๋ฅผ ๋ํ ๋๊ฐ๋ ๋ชจ๋ ๋ฒ์์ ๊ฒ์ฌ๋ฅผ ํด์ผ ํจ.
๋ถํ ์ ํด์ 16์นธ์ ํ์ธํ์.
: ๋ชจ๋ ๋์ผํ๋ค? -> ๊ตณ์ด ๋ถํ ํ ํ์ ์์.
๋ถํ ์ ํ๋๋ฐ. 16์นธ์ ๊ฐ์ด ๋ค๋ฅด๋ฏ๋ก, ์ด ๋๋ ๋ถํ ํ์.
์๋๋ก ์งํํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ ๋ฐ์ํจ. : ์ ๋ฐ์ดํธ ๋จ.
for(int i = y; i < y + size; ++i)
{
for(int j = x; j < s + size; ++j)
์์๋๋ ๊ฐ์ : x,y ์ฌ์ฉํ๊ณ , ๋๋๋ ๋ถ๋ถ์ size๋ก ๋๋ฆฌ๋ ๋ฐฉ์์ผ๋ก
์ ๊ทผ ํ์.
: ๋ถํ ์ ๋ณต
: ์ฃผ ๊ด์ฌ์ฌ๋ ๊ฐ์ฅ ์์ ์ธ์ ํ 4๊ฐ์ ์์๋ฅผ ์ด๋ป๊ฒ ํ ๊ฒ์ด๋?!
#include <iostream>
using namespace std;
#include <vector>
#include <string>
//์ธ์ ๋ 2์ ์ ๊ณฑ์
string divide(vector<vector<string>>&v, int sY, int sX, int range)
{
if (range == 2)
{
string w = "";
for (int i = sY; i < sY + range; ++i)
{
for (int j = sX; j < sX + range; ++j)
{
w += v[i][j];
}
}
if(w[0] == '0' && w[1] == '0'
&& w[2] == '0' && w[3] == '0')
{
return "0";
}
else if (w[0] == '1' && w[1] == '1'
&& w[2] == '1' && w[3] == '1')
{
return "1";
}
string w2 = "(" + w + ")";
return w2;
}
string word = "";
word += divide(v, sY, sX, range / 2);
word += divide(v, sY, sX + range / 2 , range / 2);
word += divide(v, sY + range / 2 , sX, range / 2);
word += divide(v, sY + range / 2 ,
sX + range / 2, range / 2);
//word๊ฐ ๋ชจ๋ 0์ด๊ฑฐ๋ 1์ผ ๊ฒฝ์ฐ
if (word[0] == '0' && word[1] == '0' &&
word[2] == '0' && word[3] == '0')
{
return "0";
}
else if (word[0] == '1' && word[1] == '1' &&
word[2] == '1' && word[3] == '1')
{
return "1";
}
// ์ค๋ณต๋์ง ์์ผ๋ฉด ๊ดํธ ์์
์ ํด์ผ ํจ.
string word2 = "(" + word + ")";
return word2;
}
// ๋ฌธ์ ์ดํด๋ฅผ ๋ชปํจ...
int main()
{
// ์ผ๋จ ํญ์ ์ ์ฌ๊ฐํ์.
// 8 by 8
// ๋ฒ์๋ฅผ ์ผ์ชฝ์๋ถ๋ถ ~ ์ค๋ฅธ์ชฝ ์๋ซ๋ถ๋ถใ
์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก
// 4์นธ์ฉ ๋๋์ด์ ์งํํ์.
// 00 ~ 77 -> 4 , 4 ์ฉ ๋ถํ .
// 00 ~ 33 // 04 ~ 37 // 40 ~ 73 // 44 ~ 77
// 1,2์ ์ธ๋ฑ์ค๋ ์์ ์ธ๋ฑ์ค๊ฐ.
// 3๋ฒ์ ๋๋ฆด ๋ฒ์
//go(y, x, size / 2)
//go(y , x + size / 2, size / 2)
//go(y+ size / 2, x, size / 2)
//go(y + size / 2, x + size / 2 , size / 2)
int n;
cin >> n;
vector<vector<string>>v(n, vector<string>(n));
for (int i = 0; i < n; ++i)
{
string s;
cin >> s;
for (int j = 0; j < n; ++j)
{
v[i][j] = s[j];
}
}
// ์ถ๋ ฅ์ฉ
//for (int i = 0; i < n; ++i)
//{
// for (int j = 0; j < n; ++j)
// {
// cout << v[i][j] << " ";
// }
// cout << endl;
//}
string res = divide(v, 0, 0, n);
cout << res;
}