Z 모양 순서대로 방문하기 때문에 재귀호출도 Z 모양으로 해주면 된다.
만약 r과 c가 범위안에 있지 않으면 사각형 범위만큼 답에 더해주면 된다.
방문하는 순서대로 재귀를 하므로 r과 c 보다 나중에 나오는 범위는 더하지 않게 된다.
#include<iostream>
#include<cmath>
using namespace std;
int n, r, c;
int cnt;
int temp;
void Z(int N,int y,int x)
{
//답을 찾으면
if (r == y && c == x)
{
cout << cnt ;
return;
}
if (r >= y&&c >= x&&r < y + N && c < x + N)//범위 안에 있다면 4등분 한다.
{
//1->2->3->4 순대로 탐색
Z(N / 2, y, x);
Z(N / 2, y, x+N/2);
Z(N / 2, y + N / 2, x);
Z(N / 2, y + N / 2, x + N / 2);
}
else
{
cnt += (N*N);
}
}
int main()
{
cin >> n >> r >> c;
temp = pow(2, n);
Z(temp, 0, 0);
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 11727 2×n 타일링 2 c++ (0) | 2022.09.03 |
---|---|
[백준] 1932 정수 삼각형 c++ (0) | 2022.09.03 |
[백준]1062 가르침 c++ (0) | 2022.08.19 |
[백준] 15644 N과M(10) c++ (0) | 2022.08.16 |
[백준] 2447 별찍기 -10 (0) | 2022.08.10 |