boj)1074 - Z

2020. 11. 12. 13:19PS/boj

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.io.*;
import java.util.*;
 
public class boj_1074 {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static int n, r, c;
 
    public static void main(String[] args) throws IOException {
        StringTokenizer st = new StringTokenizer(br.readLine());
 
        n = Integer.parseInt(st.nextToken());
        r = Integer.parseInt(st.nextToken());
        c = Integer.parseInt(st.nextToken());
 
        int ans = func(n, r, c);
        System.out.println(ans);
    }
 
    static int func(int n, int r, int c) {
        if (n == 0return 0;
        int half = (int) Math.pow(2, n-1);
 
        // 1번 사각형
        if (r < half && c < half) {
            return func(n-1, r, c);
        }
        // 2번 사각형
        if (r < half && c >= half) {
            return half*half + func(n-1, r, c-half);
        }
        // 3번 사각형
        if (r >= half && c < half) {
            return 2*half*half + func(n-1, r-half, c);
        }
        // 4번 사각형
        return 3*half*half + func(n-1, r-half, c-half);
    }
}
 
cs

 

- 재귀 -> 귀납적으로 생각

- 크기가 n인 배열의 (r, c) 는 크기가 n-1인 배열의 (r, c) 를 통해 구할 수 있다.

 

1. 함수의 정의

-> 2^n * 2^n 배열에서 (r, c) 를 방문하는 순서를 리턴하는 함수

 

2. base condition

-> n = 0 일때 return 0;

 

3. 재귀 식

-> 전체를 4등분하면 결국엔 사각형이 4개가 됨

1번 2번 3번 4번으로 번호를 붙였다고 생각

 

r,c 의 위치가 1번, 2번, 3번, 4번 사각형일 경우로 나누어서 생각

 

 

    


www.acmicpc.net/problem/1074

'PS > boj' 카테고리의 다른 글

boj)1780 - 종이의 개수  (0) 2020.11.13
boj)17478 - 재귀함수가 뭔가요?  (0) 2020.11.12
boj)11729 - 하노이 탑 이동 순서  (0) 2020.11.11
boj)2589 - 보물섬  (0) 2020.11.11
boj)2941 - 크로아티아 알파벳  (0) 2020.11.05