https://www.acmicpc.net/problem/1074
처음 든 생각은, 0,1,2,3 중에 영역을 계속 찾아들어가야하는 것 까지 생각을 했었다.
그런데 문제는 누적수를 어떻게 구하느냐 였다
#include <iostream>
using namespace std;
int n, r, c;
int ans;
void Z(int y, int x, int size)
{
if (y == r && x == c)
{
cout << ans << '\n';
return;
}
// r,c가 현재 사분면에 존재한다면
if (r < y + size && r >= y && c < x + size && c >= x)
{
// 1사분면 탐색
Z(y, x, size / 2);
// 2사분면 탐색
Z(y, x + size / 2, size / 2);
// 3사분면 탐색
Z(y + size / 2, x, size / 2);
// 4사분면 탐색
Z(y + size / 2, x + size / 2, size / 2);
}
else
{
ans += size * size;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> r >> c;
Z(0, 0, (1 << n));
return 0;
}
다음과 같은 방식으로 범위를 좁히고
범위안에 좌표가 없다면 사이즈^2(네모의 크기)를 누적하여 더하는 방식으로 문제를 풀었다.
'코딩테스트_백준풀이' 카테고리의 다른 글
DFS와 BFS #1260 c++ 풀이 (1) | 2023.10.24 |
---|---|
유기농 배추 #1012 c++ 풀이 (0) | 2023.10.24 |
피보나치 함수 #1003 c++ 풀이 (1) | 2023.10.23 |
solved.ac #18110 c++ 풀이 (0) | 2023.10.13 |
좌표 정렬하기 #11650 c++ 풀이 (0) | 2023.10.13 |