반응형
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, 0, sizeof(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 |
반응형