알고리즘/백준
[백준] 1074 Z
오오오니
2022. 8. 25. 14:32
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);
}