๐Ÿ’ฉ1992. ์ฟผ๋“œ ํŠธ๋ฆฌ_๋‹ค์‹œ ํ’€์ž. ํ‹€๋ฆผ

phoenixKimยท2022๋…„ 8์›” 16์ผ
0

๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
71/174

์ตœ๊ทผ ์ถ”๊ฐ€ 240605

: ๋ถ„ํ•  ์ •๋ณต์ด๊ณ , ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์€ ๋งž์•˜์ง€๋งŒ,
๋†“์นœ ๋ถ€๋ถ„์ด ์žˆ๋‹ค.

  • ์ฒ˜์Œ ๋“ค์–ด๊ฐ€์ž๋งˆ์ž 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

์žฌ๊ท€๋ฅผ ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

  1. ๋˜‘๊ฐ™์€ ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  2. ๊ทธ๋Ÿฌ๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ๋‹ฌ๋ผ์ ธ์•ผ ํ•  ๊ฒฝ์šฐ.

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 ์ขŒํ‘œ ๋‘๊ฐœ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ๊ธฐ์ €์‚ฌ๋ก€? ๊ฐ€ ํ•„์š”ํ•œ๋‹ค. ๋” ์ด์ƒ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ์กฐ๊ฑด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ.

ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฒŒ

  • ์ดˆ๋ก์ƒ‰ ๋ถ€๋ถ„์„ ๋ณด๋ฉด, 0,0,0,0 ์ด ๋‚˜์™”๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ๋ฐ”๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,
    0,0,0,0 ์ด 4๊ฐœ๊ฐ€ ๋™์ผํ•œ์ง€ ํ™•์ธ์„ ๋˜ ํ•ด์•ผ ํ•œ๋‹ค.
    ์ด๊ฑฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฑด๊ฐ€์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด์ž.

  • ์•„๋ž˜ ๋‚ด์šฉ์€ ๋ณด์ง€ ๋ง์ž.

๋ณ€๊ฒฝ 231202

์ ‘๊ทผํ•˜๊ธฐ.

: ์˜์—ญ์„ ๋ถ„ํ•  ํ•˜๊ณ , ์ •๋ณตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์ง๊ด€์ ์ž„.

  • ์‹œ์ž‘ ์ •์ ์„ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์ด์™€ ๊ฐ™์Œ.

  • ์ฝ”๋“œ ํ‘œํ˜„
    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์นธ์˜ ๊ฐ’์ด ๋‹ค๋ฅด๋ฏ€๋กœ, ์ด ๋•Œ๋Š” ๋ถ„ํ•  ํ•˜์ž.


์•„๋ž˜๋กœ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ ๋ฐœ์ƒํ•จ. : ์—…๋ฐ์ดํŠธ ๋จ.

๊ด€๋ จ ๋ฌธ์ œ

๐Ÿ˜ง๋ถ„ํ•  ์ •๋ณต ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•  ๊ฒƒ์ธ๊ฐ€?

    1. ์ธ์ž๋กœ ์‹œ์ž‘๋˜๋Š” ์ธ๋ฑ์Šค (2์ฐจ์› ์ด๋ผ๋ฉด , yx๊ฐ’)์„ ๋ณด๋‚ด๊ณ ,
    1. ์‚ฌ์ด์ฆˆ๋„ ์ธ์ž๋กœ ๋ณด๋‚ด์ฃผ์ž
  • 1๋ฒˆ๊ณผ 2๋ฒˆ์„ ํ†ตํ•ด ์žฌ๊ท€ ํ•จ์ˆ˜์•ˆ์—์„œ ํ˜ธ์ถœ์„ ์‹œ๋„ํ•จ.
    1. ์ฒดํฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์ž.
      : ๋ณด๋‚ด์ฃผ๋Š” 3๊ฐœ์˜ ์ธ์ž๋ฅผ ํ†ตํ•ด์„œ for๋ฌธ์„ ๋งŒ๋“ค์ž.
    1. ๋ฐ˜๋“œ์‹œ ์ตœ์ข… ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜ ๋‹ค์Œ์— ๋ฐ˜ํ™˜์„ ํ•ด์•ผํ•จ.

for(int i = y; i < y + size; ++i)
{
for(int j = x; j < s + size; ++j)
์‹œ์ž‘๋˜๋Š” ๊ฐ’์„ : x,y ์‚ฌ์šฉํ•˜๊ณ , ๋๋‚˜๋Š” ๋ถ€๋ถ„์„ size๋กœ ๋Œ๋ฆฌ๋Š” ๋ฐฉ์‹์œผ๋กœ
์ ‘๊ทผ ํ•˜์ž.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜

: ๋ถ„ํ•  ์ •๋ณต

ํ’€์ด์ „๋žต

: ์ฃผ ๊ด€์‹ฌ์‚ฌ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ธ์ ‘ํ•œ 4๊ฐœ์˜ ์›์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ• ๊ฒƒ์ด๋ƒ?!

  • ํ•ด๋‹น ์‚ฌ๊ฐํ˜•์˜ ๋ฉด์ ์— ํ•ด๋‹นํ•˜๋Š” 1,2,3,4์‚ฌ๋ถ„๋ฉด ์‚ฌ๊ฐํ˜•์— ์ ‘๊ทผ์„ ํ•ด์•ผ ํ•จ.
    1) ์‚ฌ๊ฐํ˜•์„ ์ชผ๊ฐœ๊ฐ€๋ฉด์„œ, ์–ด๋– ํ•œ ์ˆœ๊ฐ„์— 4๊ฐœ์˜ ์›์†Œ๋ฅผ ํƒ์ƒ‰ํ• ์ง€์— ๋Œ€ํ•œ
    ์กฐ๊ฑด์„ ๊ฑธ์–ด์•ผ ํ•จ.
    2) ์ฒซ๋ฒˆ์งธ ์‚ฌ๊ฐํ˜•์„ ํƒ€๊ฒŸ์œผ๋กœ ํ•œ๋‹ค๋ฉด ์ด๋•Œ, ์ด 4๊ฐœ์˜ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ
    ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, for๋ฌธ์„ ์–ด๋–ป๊ฒŒ ๋Œ๋ฆด์ง€๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•จ.
    : ์ขŒ์ƒ๋‹จ ๋์ ๊ณผ ์šฐํ•˜๋‹จ ๋์ ์„ ์ด์šฉํ•ด ์ง„ํ–‰ํ–ˆ์Œ

์ฝ”๋“œ

#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;
}

profile
๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด