[재귀] z 1074

Soohyeon B·2022년 12월 14일
0

알고리즘 문제 풀이

목록 보기
63/70

풀이

1) 함수의 정의
int func(int n, int r, int c)
2^nx2^n 배열에서 (r,c)를 방문하는 순서를 반환하는 함수
2) base condition
if(n=0) return 0;
3) 재귀 식
(r,c)가 1번 사각형일 때 return func(n-1, r, c);
(r,c)가 2번 사각형일 때 return halfxhalf+func(n-1, r, c-half);
(r,c)가 3번 사각형일 때 return 2xhalfxhalf+func(n-1, r-half, c);
(r,c)가 4번 사각형일 때 return 3xhalfxhalf+func(n-1, r-half, c-half);
*half = 2^n-1 (한변 길이의 절반)

#include <bits/stdc++.h>
using namespace std;

int func(int n, int r, int c){
  if(n == 0) return 0;
  int half = 1<<(n-1);
  if(r < half && c < half) return func(n-1, r, c);
  if(r < half && c >= half) return half*half + func(n-1, r, c-half);
  if(r >= half && c < half) return 2*half*half + func(n-1, r-half, c);
  return 3*half*half + func(n-1, r-half, c-half);
}

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n, r, c;
  cin >> n >> r >> c;
  cout << func(n, r, c);
}
profile
하루하루 성장하는 BE 개발자

0개의 댓글