티스토리 뷰

시뮬레이션



- 1번, 4번은 순서대로 보면 되지만 2번, 3번은 양 옆을 따로 봐야한다.


1번 톱니바퀴 이동 명령 1->2->3->4

4번 톱니바퀴 이동 명령 4->3->2->1

2번 톱니바퀴 이동 명령 2->1 // 2->3->4

3번 톱니바퀴 이동 명령 3->4 // 3->2->1


- 1번과 3번은 같은 방향으로 움직인다.

- 2번과 4번은 같은 방향으로 움직인다.


소스 코드



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
#include <iostream>
#include <cmath>
#define FOR(i,a,b) for(int i = a; i < b; i++)
using namespace std;
int K;
int arr[5][8];
void move1(int x) { //시계방향이동
    int tmp = arr[x][7];
    for (int i = 7; i > 0; i--) {
        arr[x][i] = arr[x][i - 1];
    }
    arr[x][0= tmp;
}
void move2(int x) { //반시계방향이동
    int tmp = arr[x][0];
    FOR(i,0,7) {
        arr[x][i] = arr[x][i + 1];
    }
    arr[x][7= tmp;
}
int main() {
    FOR(i, 15) FOR(j, 08scanf("%1d"&arr[i][j]);
    cin >> K;
    int num, d;
    while (K--) {
        cin >> num >> d; //톱니바퀴 번호, 방향
        switch (num)
        {
        case 1:
            if (arr[1][2!= arr[2][6]) { // 2번의 이동여부
                if (arr[2][2!= arr[3][6]) { //3번의 이동여부
                    if (arr[3][2!= arr[4][6])    d == 1 ? move2(4) : move1(4); //4번의 이동여부
                    d == 1 ? move1(3) : move2(3);
                }
                d == 1 ? move2(2) : move1(2);
            }
            d == 1 ? move1(1) : move2(1);
            break;
        case 2:
            if (arr[1][2!= arr[2][6]) d == 1 ? move2(1) : move1(1);
            if (arr[2][2!= arr[3][6]) {
                if (arr[3][2!= arr[4][6]) d == 1 ? move1(4) : move2(4);
                d == 1 ? move2(3) : move1(3);
            }
            d == 1 ? move1(2) : move2(2);
            break;
        case 3:
            if (arr[3][2!= arr[4][6]) d == 1 ? move2(4) : move1(4); //4번의 이동여부
            if (arr[2][2!= arr[3][6]) { //2번의 이동여부
                if (arr[1][2!= arr[2][6]) d == 1 ? move1(1) : move2(1);
                d == 1 ? move2(2) : move1(2);
            }
            d == 1 ? move1(3) : move2(3);
            break;
        case 4:
            if (arr[3][2!= arr[4][6]) { // 3번의 이동여부
                if (arr[2][2!= arr[3][6]) { //2번의 이동여부
                    if (arr[1][2!= arr[2][6]) d == 1 ? move2(1) : move1(1); //1번의 이동여부
                    d == 1 ? move1(2) : move2(2);
                }
                d == 1 ? move2(3) : move1(3);
            }
            d == 1 ? move1(4) : move2(4);
            break;
        }
    }
    int ans = 0;
    FOR(i, 15if (arr[i][0== 1) ans += pow(2, i - 1);
    cout << ans;
}
cs


반응형

'백준 온라인 저지' 카테고리의 다른 글

190704 BOJ 1309 동물원  (0) 2019.07.04
190411 BOJ 15683번 감시  (0) 2019.04.11
190407 BOJ 12100번 2048 (Easy)  (0) 2019.04.07
190326 BOJ 3190번 뱀  (0) 2019.03.26
190326 BOJ 1354번 무한 수열 2  (0) 2019.03.26
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함