쿼드 압축 후 세기

108번뇌·2021년 9월 18일
0

이문제 못풀었음.

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 한다.

profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글