Algorithm

백준_z_1074

Young_J 2020. 10. 22. 23:41

//알고리즘

1. 분할정복.

2. 재귀를 이용하여 분할정복을 구현함.

 

 

import java.util.Scanner;

public class z_1074 {
	static int N, r, c, map[][], div, Ans;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		N = sc.nextInt();
		r = sc.nextInt();
		c = sc.nextInt();

		div = (int) Math.pow(2, N);
		cal(1, r, c);

	}

	private static void cal(int idx, int r, int c) {
		if (idx == N) {
			int nr = Math.abs(r) % 2;
			int nc = Math.abs(c) % 2;

			if (nr == 1 && nc == 1) {
				System.out.println(Ans + 3);
			} else if (nr == 1 && nc == 0) {
				System.out.println(Ans + 2);
			} else if (nr == 0 && nc == 1) {
				System.out.println(Ans + 1);
			} else {
				System.out.println(Ans);
			}
			return;
		}

		div /= 2;
		if (div < r + 1 && div < c + 1) {
			Ans += (int) (3 * Math.pow(div, 2));
		} else if (div < r + 1 && div >= c + 1) {
			Ans += (int) (2 * Math.pow(div, 2));
		} else if (div >= r + 1 && div < c + 1) {
			Ans += (int) (1 * Math.pow(div, 2));
		} else {
			Ans += (int) (0 * Math.pow(div, 2));
		}
		r %= div;
		c %= div;
		cal(idx + 1, r, c);
	}

}