재귀를 활용한 문제 풀이
전체크기를 4개의 조각으로 n등분 해서 탐색
1,2,3,4분면으로 나눌 수 있음
입력 받은 r, c가 어느 사분면에 있는지 파악하여 재귀적으로 탐색
그 후 크기의 반을 줄인 뒤 다시 재귀 탐색
//백준 1074, Z
#include <iostream>
#include <vector>
#include <queue>
//사분면 순서 중요
int solve(int n, int r, int c){
int half = 1<<(n-1);
if(n == 0) return 0;
//if(n == 1) return r*2 + c;
if(r < half && c < half) return solve(n-1, r, c); //1
if(r < half && c >= half) return half*half + solve(n-1, r, c-half); //2
if(r >= half && c < half) return 2*half*half + solve(n-1, r-half, c); //3
return 3*half*half + solve(n-1, r-half, c-half); //4
}
int main() {
int N, R, C;
std::cin >> N >> R >> C;
std::cout << solve(N, R, C);
return 0;
}
2024-11-11T06:51:12.519Z