[C언어] 14891. 톱니바퀴

SW 업무 관련/백준

[C언어] 14891. 톱니바퀴

WillBe_ 2018. 9. 24. 22:58

15685 드래곤 커브를 풀다가 좌절감을 느낀 후..푼 문제


시계방향 -> 오른쪽으로 밀어줌

반시계방향 -> 왼쪽으로 밀어줌


에 대한 함수를 만들어  준다.


그리고 돌리고자 하는 톱니와 방향을 입력 받으면, 이 톱니를 기준으로 돌려야하는 톱니들을 탐색해준다. 탐색하는 도중에는 톱니 바퀴를 돌리지 말고, 별도의 배열을 만들어 돌아가야하는 방향을 저장해 둔다.



예로 3번이 시계방향)

2번의 3시 방향과  4번의 9시 방향을 비교하여 극성을 비교해준다. 극성이 다르면 3번이 시계 방향이니 나머지는 반 시계로 돈다. 그리고 돌아가는 방향과 톱니 바퀴 순번을 배열에 저장해준다.


그리고 3번 다음 2번이 돌아가야되는 톱니 바퀴이면 1번의 3시 방향과 2번의 9시 방향을 비교해주어, 돌아갈지 말지를 판단해준다.


이 과정에 완료된 후, 돌아가야되는 톱니들을 체크해준 방향과, 위에서 별도로 만들어준 함수를 이용해 시계/반시계 방향으로 배열을 돌려준다.



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
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <string.h>
 
int a[5][8];
 
void Turn_Right(int a[8])
{
    int temp = a[7];
    for (int j = 7; j > 0; j--)
    {
        a[j] = a[j - 1];
    }
    a[0= temp;
}
 
void Turn_Left(int a[8])
{
    int temp = a[0];
    for (int j = 0; j < 7; j++)
    {
        a[j] = a[j + 1];
    }
    a[7= temp;
}
 
int main()
{
    for (int i = 1; i <= 4; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            scanf("%1d",&a[i][j]);
        }
    }
 
    int n, aa, bb;
    scanf("%d"&n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d %d"&aa, &bb);
        int Turn[5= { 0 };
 
        Turn[aa] = bb;
 
        for (int j = 1; j <= 3; j++)
        {
            if (aa - j > 0 && a[aa - j][2!= a[aa - j + 1][6&& Turn[aa - j + 1!= 0 )//왼쪽
            {
                if (Turn[aa - j + 1== 1)
                {
                    Turn[aa - j] = -1;
                }
                else
                {
                    Turn[aa - j] = 1;
                }
            }
 
            if (aa + j <= 4 && a[aa + j][6!= a[aa + j - 1][2&& Turn[aa + j - 1!= 0 )//오른쪽
            {
                if (Turn[aa + j - 1== 1)
                {
                    Turn[aa + j] = -1;
                }
                else
                {
                    Turn[aa + j] = 1;
                }
            }
        }
 
        for (int i = 1; i <= 4; i++)
        {
            if (Turn[i] == 1)
            {
                Turn_Right(a[i]);
            }
            else if (Turn[i] == -1)
            {
                Turn_Left(a[i]);
            }
        }        
    }
    int total = 0;
 
    total += a[1][0];
    total += (a[2][0]*2);
    total += (a[3][0]*4);
    total += (a[4][0]*8);
 
    printf("%d\n",total);
 
    return 0;
}
cs


'SW 업무 관련 > 백준' 카테고리의 다른 글

[C언어] 14889 스타트와 링크  (0) 2018.09.25
[C언어] 14890. 경사로  (0) 2018.09.25
[C언어] 25686 치킨 배달.  (0) 2018.09.24
[C언어] 6593 상범 빌딩  (0) 2018.09.24
[C언어] 14502. 연구소(DFS)  (0) 2018.09.23