단순 분할 정복 알고리즘을 사용했다
package BAEKJOON;
import java.util.Scanner;
public class TheZ_1074 {
static long r;
static long c;
public static int where(long k, long y, long x) {
if ((k / 2 + y > r) && (k / 2 + x > c)) {
return 0;
} else if ((k / 2 + y > r) && (k / 2 + x <= c)) {
return 1;
} else if ((k / 2 + y <= r) && (k / 2 + x > c)) {
return 2;
} else {
return 3;
}
}
public static long TheZ(long l, long y, long x) {
if (l == 1) {
return 0;
} else {
int quadrant = where(l, y, x);
switch (quadrant) {
case 0 :
return TheZ(l / 2, y, x);
case 1 :
return Math.round(Math.pow(l / 2, 2)) + TheZ(l / 2, y, x + l / 2);
case 2 :
return Math.round(Math.pow(l / 2, 2)) * 2 + TheZ(l / 2, y + l / 2, x);
default:
return Math.round(Math.pow(l / 2, 2)) * 3 + TheZ(l / 2, y + l / 2, x + l / 2);
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
r = sc.nextInt();
c = sc.nextInt();
sc.close();
System.out.println(TheZ(Math.round(Math.pow(2, n)), 0, 0));
}
}
'알고리즘' 카테고리의 다른 글
백준 별찍기-2448 (0) | 2020.11.08 |
---|---|
백준 토마토-7576 (0) | 2020.11.08 |
백준 설탕 배달-2839 (0) | 2020.11.08 |
백준 별 찍기10-2447 (0) | 2020.11.08 |
백준 쿼드트리-1992 (0) | 2020.11.08 |