이문제 못풀었음.
https://programmers.co.kr/learn/courses/30/lessons/68936
#include <string>
#include <vector>
using namespace std;
int ONE(0);
int ZERO(0);
void dfs(int row, int col, int size, vector<vector<int>> &vArray)
{
bool zero(true);// 전부 다 0이여야 0이다.
bool one(true);// 전부 다 1이여야 1이다.
for (int i = row; i < row+size; i++)//최종적으로는 row와 col이 1이되므로 그때 알아서 전부 반환된다.
{
for (int j = col; j < col+size; j++)
{
if (vArray[i][j] == 1) zero = false;//하나라도 있으면 만족 안함.
if (vArray[i][j] == 0) one = false;//하나라도 있으면 만족 안함
}
}
if (one == true)
{
ONE++;
return;
}
if (zero == true)
{
ZERO++;
return;
}
//구역중 만족하는게 있다면 return 되서 더이상 진행하지 않음.
dfs(row + size / 2, col, size / 2, vArray);
dfs(row, col + size / 2, size / 2, vArray);
dfs(row , col, size / 2, vArray);
dfs(row + size / 2, col + size / 2, size / 2, vArray);
}
vector<int> solution(vector<vector<int>> arr) {
vector<int> answer;
int size = arr.size();
dfs(0, 0, size, arr);
answer.push_back(ZERO);
answer.push_back(ONE);
return answer;
}
처음에 보고 2^n으로 길이가 늘어난다고 했다.
1.처음에 전체 -> 4등분 -> 4등분의 4등분 .... 이 구조를 보고 DFS로 가야겠다고 판단을 해야하며,
2.return 조건은 마지막 쪼갤 수 없을 때가 기준이고, 그 이전에 4각등분 한 것이 모두 같은 수가 나오면 return 한다.