본문 바로가기

코딩 테스트

백준 17829 - 222풀링

쿼드트리로 2*2 행렬을 계속해서 만들자

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
int n;

using namespace std;

int Recursion(int x, int y, int len, vector<vector<int>>& vec)
{
	// 마지막 2*2 정사각형을 만들기 위해
	if (len == 1)
	{
		return vec[x][y];
	}

	vector<int> v;

	int divsize = len / 2;
	v.push_back(Recursion(x, y, divsize, vec));
	v.push_back(Recursion(x, y + divsize, divsize, vec));
	v.push_back(Recursion(x + divsize, y, divsize, vec));
	v.push_back(Recursion(x + divsize, y + divsize, divsize, vec));

	// 내림차순
	sort(v.begin(), v.end(), greater<>());
	// 2번째로 큰거를 반환해서 계속해서 2*2 를 만드는 느낌
	return v[1];
}



int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);	cout.tie(0);

	cin >> n;

	vector<vector<int>> vec(n, vector<int>(n, -1));

	for (int i = 0; i < n; ++i)
	{
		for (int j = 0; j < n; ++j)
		{
			cin >> vec[i][j];
		}
	}

	int answer = Recursion(0, 0, vec.size(), vec);
	cout << answer;


	return 0;
}

'코딩 테스트' 카테고리의 다른 글

백준 11053 LIS 1  (0) 2024.11.01
백준 11727 타일링  (0) 2024.10.15
백준 2493 탑  (0) 2024.09.09
백준 1992 쿼드트리  (0) 2024.09.03
백준 - 14400 편의점 2  (0) 2024.09.03