Z [실버1]
문제 링크
https://www.acmicpc.net/problem/1074
풀이
4분할된 사각형의 모음으로 간주하고, 구해야할 row, column 값에 따라 단계별 블록 수를 점진적으로 더해주며 row, column을 갱신한다.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include<iostream>
using namespace std;
int N, r, c, answer;
int main(void)
{
answer = 0;
cin >> N >> r >> c;
while(N-- > 1) {
int size = 1 << N;
int numOfBlock = 1 << (2 * N);
if(r >= size) {
// 4 사분면
if(c >= size) {
answer += numOfBlock * 3;
r -= size;
c -= size;
}
// 3 사분면
else {
answer += numOfBlock * 2;
r -= size;
}
}
else {
// 2 사분면
if (c >= size)
{
answer += numOfBlock;
c -= size;
}
// 1 사분면
else
{
;
}
}
}
if(r == 0 && c == 0) {
;
}
else {
if(r == 0 && c == 1) {
answer += 1;
}
else if(r == 1 && c == 0) {
answer += 2;
}
else {
answer += 3;
}
}
cout << answer;
return 0;
}
bool isIn(int y, int x) {
return (0 <= y && y < N) && (0 <= x && x < M);
}