728x90
https://www.acmicpc.net/problem/1074
package BKD_0x0B_Recursion;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_1074 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int r = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
System.out.println(getZ(n,r,c));
}
static int getZ(int n, int r, int c){
if(n==0) return 0;
int half = 1<<(n-1);
if(r<half && c<half) return getZ(n-1,r,c);
if(r<half && c>=half) return half*half + getZ(n-1,r,c-half);
if(r>=half && c<half) return 2* half*half +getZ(n-1,r-half,c);
return 3 * half*half +getZ(n-1,r-half,c-half);
}
}
풀이
#1. 함수 정의
int func(int n, int r, int c)
2^n x 2^n 배열에서 (r,c)를 방문하는 순서를 반환하는 함수
#2. Base Condition
n==0 -> return 0;
#3. Recursion
area 1 | area2
area3 | area4
int half == 2^n-1
(r,c) in area1 => return func(n-1,r,c)
(r,c) in area2 => return func(n-1, r,c-half)
(r,c) in area3 => return func(n-1, r-half, c)
return func(n-1, r-half, c-half)
728x90
'🐣 알고리즘 삐약 > 💻 백준 삐약' 카테고리의 다른 글
94 삐약 : 백준 2630 | 색종이 만들기 [바킹독| 재귀 |JAVA] (0) | 2024.09.11 |
---|---|
93 삐약 : 백준 1780| 종이의 개수 [바킹독| 재귀 |JAVA] (0) | 2024.09.10 |
91 삐약 : 백준 11729| 하노이탑 이동순서 [바킹독| 재귀 |JAVA] (0) | 2024.09.10 |
90 삐약 : 백준 1629| 곱셈 [바킹독| 재귀 |JAVA] (0) | 2024.09.10 |
89 삐약 : 백준 15656| N과 M (7) [바킹독| 백트래킹 |JAVA] (0) | 2024.08.14 |