BOJ::14891 톱니바퀴

https://www.acmicpc.net/problem/14891


이문제는 어렵다기보단 까다롭다 라는 표현이 맞을거 같다.

머리에서 직관적으로 떠오르지 않고, 회전 결과에 대해 상상이 잘 안되서 그리면서 풀었다.

또한 최대한 편하고 직관적으로 코드가 눈에 들어올 수 있도록 함수를 이용하여 풀었다.


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
65
66
67
68
69
70
71
72
73
74
#include <stdio.h>
#include <memory.h>
 
bool check[4];
int map[4][8];
int k;
 
//시계방향 회전
void cw(int *array) {
    int tmp = array[7];
    for (int i = 7; i > 0; i--) {
        array[i] = array[i - 1];
    }
    array[0= tmp;
}
//반시계방향 회전
void ccw(int *array) {
    int tmp = array[0];
    for (int i = 0; i < 7; i++) {
        array[i] = array[i + 1];
    }
    array[7= tmp;
}
 
void swit(int *array,int flag) {
    if (flag == 1) {
        cw(array);
    }
    else {
        ccw(array);
    }
}
 
void solve(int n, int flag) {
    check[n] = true;
    if (n + 1 < 4 && !check[n+1]) {
        if (map[n][2!= map[n + 1][6]) {
            solve(n + 1-1 * flag);
        }
    }
    if (n - 1 >= 0 && !check[n-1]) {
        if (map[n][6!= map[n - 1][2]) {
            solve(n - 1-1 * flag);
        }
    }
    swit(map[n], flag);
}
 
int main() {
    char input[9];
    for (int i = 0; i < 4; i++) {
        scanf("%s"&input);
        for (int j = 0; j < 8; j++) {
            map[i][j] = input[j]-'0';
        }
    }
 
    scanf("%d"&k);
    for (int i = 0; i < k; i++) {
        int x, y;
        scanf("%d %d"&x, &y);
        memset(check, 0sizeof(check));
        solve(x-1, y);
    }
 
    int score = 1;
    int res = 0;
    for (int i = 0; i < 4; i++) {
        if (map[i][0== 1) res += score;
        score *= 2;
    }
 
    printf("%d\n", res);
}
cs


'BOJ::문제풀이' 카테고리의 다른 글

11723 집합  (0) 2018.02.03
2470 두 용액  (0) 2018.01.30
14503 로봇 청소기  (0) 2018.01.28
14890 경사로  (0) 2018.01.28
14502 연구소  (0) 2018.01.27

+ Recent posts