μ΅œλŒ€ 1 λΆ„ μ†Œμš”

πŸ“ [S1_1074] Z

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static StringTokenizer st;
    static int N, r, c, cnt;
    static int[][] arr;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();


        st = new StringTokenizer(br.readLine(), " ");
        // λ°°μ—΄μ˜ 크기
        N = Integer.parseInt(st.nextToken());

        // ν–‰
        r = Integer.parseInt(st.nextToken());
        // μ—΄
        c = Integer.parseInt(st.nextToken());

        int temp = (int) Math.pow(2, N);

        dfs(temp, 0,0);
    }

    static void dfs(int n, int x, int y) {
        // 기저쑰건
        if (x == c && y == r) {
            System.out.println(cnt);
            return;
        }

        // μœ„μΉ˜λ§ˆλ‹€ μž¬κ·€ 호좜
        if (y <= r && r < (y + n) && x <= c && c < (x + n)) {
            int next_n = n / 2;
            dfs(next_n, x, y);
            dfs(next_n, x + next_n, y);
            dfs(next_n, x, y + next_n);
            dfs(next_n, x + next_n, y + next_n);
        }
        else{
            cnt += n*n;
        }
    }
}

πŸ€” λ‚˜μ˜ 생각

ν•΄λ‹Ή ꡬ역내에 r,cκ°€ μ†ν•˜λŠ”μ§€ μ²΄ν¬ν•œλ‹€. λ§Œμ•½ μ‘΄μž¬ν•˜λ©΄ ν•΄λ‹Ή ꡬ역을 4λ“±λΆ„μœΌλ‘œ λ‚˜λˆˆλ‹€.
λ§Œμ•½ ν•΄λ‹Ή ꡬ역에 μ†ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ ν•΄λ‹Ήκ΅¬μ—­μ˜ 크기만큼 νƒμƒ‰ν•œ μˆ˜μ— 더해쀀닀 !!
λΆ„ν•  정볡 λ¬Έμ œμ΄λ‹€.