import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ1074 {
public static void main(String[] args) throws Exception {
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());
zFind(n, r, c);
System.out.println(cnt);
}
static int cnt = 0;
private static void zFind(int n, int r, int c) {
// n = 0 일 경우는 경우에 미 포함
if (n == 0)
return;
// 영역 divide를 위한 section 변수
// 0 | 1
// -----
// 2 | 3
int section = 0;
// section 구분 기준이 될 half 값 구하기
int half = (int) Math.pow(2, n - 1);
// 0 index부터 세어주므로 half와 같거나 클 때 section 1로 넘어간다.
if (c >= half) {
section += 1;
}
if (r >= half) {
section += 2;
}
// 각 n마다 새로 나타나는 index는 4^(n-1)로, 경계가 되는 half의 제곱과 같은 값이다.
cnt += section * half * half;
// section은 column만 큰 경우는 1, row만 큰 경우는 2, col, row 모두가 크면 3으로 넘어간다
// 영역 마다 재귀로 넘겨주는 값이 달라진다.
switch (section) {
case 0:
zFind(n - 1, r, c);
break;
case 1:
zFind(n - 1, r, c - half);
break;
case 2:
zFind(n - 1, r - half, c);
break;
case 3:
zFind(n - 1, r - half, c - half);
break;
}
}
}
'온라인 저지 > BOJ' 카테고리의 다른 글
[BOJ/Java] 11723 집합 (0) | 2022.02.15 |
---|---|
[BOJ/Java] 2839 설탕 배달 (0) | 2022.02.15 |
[BOJ/Java] 3040 백설 공주와 일곱 난쟁이 (0) | 2022.02.14 |
[BOJ/Java] 20361 일우는 야바위꾼 (0) | 2022.02.14 |
[BOJ/Java] 20299 3대 측정 (0) | 2022.02.14 |
댓글