๐
2025-08-18
๋ฌธ์ ๋งํฌ
๋ฌธ์ ์ค๋ช
0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง 2n x 2n ํฌ๊ธฐ์ 2์ฐจ์ ์ ์ ๋ฐฐ์ด arr์ด ์์ต๋๋ค. ๋น์ ์ ์ด arr์ ์ฟผ๋ ํธ๋ฆฌ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์์ถํ๊ณ ์ ํฉ๋๋ค. ๊ตฌ์ฒด์ ์ธ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋น์ ์ด ์์ถํ๊ณ ์ ํ๋ ํน์ ์์ญ์ S๋ผ๊ณ ์ ์ํฉ๋๋ค.
๋ง์ฝ S ๋ด๋ถ์ ์๋ ๋ชจ๋ ์๊ฐ ๊ฐ์ ๊ฐ์ด๋ผ๋ฉด, S๋ฅผ ํด๋น ์ ํ๋๋ก ์์ถ์ํต๋๋ค.
๊ทธ๋ ์ง ์๋ค๋ฉด, S๋ฅผ ์ ํํ 4๊ฐ์ ๊ท ์ผํ ์ ์ฌ๊ฐํ ์์ญ(์
์ถ๋ ฅ ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.)์ผ๋ก ์ชผ๊ฐ ๋ค, ๊ฐ ์ ์ฌ๊ฐํ ์์ญ์ ๋ํด ๊ฐ์ ๋ฐฉ์์ ์์ถ์ ์๋ํฉ๋๋ค.
arr์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก arr์ ์์ถํ์ ๋, ๋ฐฐ์ด์ ์ต์ข
์ ์ผ๋ก ๋จ๋ 0์ ๊ฐ์์ 1์ ๊ฐ์๋ฅผ ๋ฐฐ์ด์ ๋ด์์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํด ํ์๋ค.
#include <vector>
using namespace std;
bool checkQuad(vector<vector<int>>& arr,int x, int y, int size, int firstNum)
{
for(int i=x; i<x+size; i++)
{
for(int j=y; j<y+size; j++)
{
if (arr[i][j] != firstNum) return false;
}
}
return true;
}
void quad(vector<vector<int>>& arr, vector<int>& answer, int x, int y, int size)
{
if(checkQuad(arr, x, y, size, arr[x][y]))
{
if(arr[x][y] == 0) answer[0]++;
else answer[1]++;
return;
}
quad(arr, answer, x, y, size/2);
quad(arr, answer, x, y+size/2, size/2);
quad(arr, answer, x+size/2, y, size/2);
quad(arr, answer, x+size/2, y+size/2, size/2);
}
vector<int> solution(vector<vector<int>> arr) {
vector<int> answer(2,0);
quad(arr, answer, 0,0,arr.size());
return answer;
}
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค - ์ฟผ๋์์ถ ํ ๊ฐ์ ์ธ๊ธฐ