반응형

www.acmicpc.net/problem/14891

 

14891번: 톱니바퀴

총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴

www.acmicpc.net

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
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <cstring>
#define rep(i,n) for(int i=1;i<=n;i++)
using namespace std;
int arr[5][4][4], direction[5], k, n, dir, ans;
void rotate(int num, int dir) {
    int temp = arr[num][0][2];
    // 시계
    if (dir == 1) {
        arr[num][0][2= arr[num][0][1];
        arr[num][0][1= arr[num][0][0];
        arr[num][0][0= arr[num][1][0];
        arr[num][1][0= arr[num][2][0];
        arr[num][2][0= arr[num][2][1];
        arr[num][2][1= arr[num][2][2];
        arr[num][2][2= arr[num][1][2];
        arr[num][1][2= temp;
    }
    // 반시계
    else if (dir == -1) {
        arr[num][0][2= arr[num][1][2];
        arr[num][1][2= arr[num][2][2];
        arr[num][2][2= arr[num][2][1];
        arr[num][2][1= arr[num][2][0];
        arr[num][2][0= arr[num][1][0];
        arr[num][1][0= arr[num][0][0];
        arr[num][0][0= arr[num][0][1];
        arr[num][0][1= temp;
    }
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    rep(i, 4) {
        char c;
        cin >> c;
        arr[i][0][1= c - '0';
        cin >> c;
        arr[i][0][2= c - '0';
        cin >> c;
        arr[i][1][2= c - '0';
        cin >> c;
        arr[i][2][2= c - '0';
        cin >> c;
        arr[i][2][1= c - '0';
        cin >> c;
        arr[i][2][0= c - '0';
        cin >> c;
        arr[i][1][0= c - '0';
        cin >> c;
        arr[i][0][0= c - '0';
    }
    cin >> k;
    while (k--) {
        memset(direction, 0sizeof(direction));
        cin >> n >> dir;
        direction[n] = dir;
        // 1. 왼쪽 확인
        for (int i = n; i > 1; i--) {
            if (arr[i][1][0== arr[i - 1][1][2]) {
                direction[i - 1= 0;
                break;
            }
            direction[i - 1= direction[i] * -1;
        }
 
        // 2. 오른쪽 확인
        for (int i = n; i < 4; i++) {
            if (arr[i][1][2== arr[i + 1][1][0]) {
                direction[i + 1= 0;
                break;
            }
            direction[i + 1= direction[i] * -1;
        }
        // 3. 회전시키기
        rep(i, 4)
            rotate(i, direction[i]);
    }
 
    rep(i, 4)
        ans += arr[i][0][1* (1 << (i-1));
    cout << ans;
}
cs
반응형

'백준 > 삼성기출' 카테고리의 다른 글

백준 15685 [복습 필수]  (0) 2021.02.23
백준 14503  (0) 2021.02.22
백준 14890  (0) 2021.02.21
백준 14499  (0) 2021.02.21
백준 14501  (0) 2021.02.15

+ Recent posts