boj)1074 - Z
2020. 11. 12. 13:19ㆍPS/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 == 0) return 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번 사각형일 경우로 나누어서 생각
'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 |