상세 컨텐츠

본문 제목

14891. 톱니바퀴(C++) SILVER I

알고리즘/백준

by 아리따운노을 2020. 8. 18. 23:04

본문

 

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 <bits/stdc++.h>
 
using namespace std;
 
bool tob[4][8],visit[4];
int ans;
 
 
void turn(int num, int dir)
{
    visit[num] = true;
    bool left = tob[num][6], right = tob[num][2];
 
    if(dir == -1)
    {
        bool temp = tob[num][0];
        for(int i=0;i<7;i++)
            tob[num][i] = tob[num][i+1];
        tob[num][7= temp;
    }
    else
    {
        bool temp = tob[num][7];
        for(int i=7;i>0;i--)
            tob[num][i] = tob[num][i-1];
        tob[num][0= temp;
    }
 
    if( num - 1 >= 0 && !visit[num - 1&& left != tob[num - 1][2])
        turn(num - 1-dir);
 
    if ( num + 1 < 4 && !visit[num + 1&& right != tob[num+1][6])
        turn(num + 1-dir);
 
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int K,num,dir,temp;
 
    for(int i=0;i<4;i++)
    {
        cin>>temp;
        int idx = 7;
        while(temp){
            tob[i][idx--= temp%10;
            temp/=10;
        }
    }
 
    cin>>K;
    for(int i=0;i<K;i++)
    {
        cin>>num>>dir;
        memset(visit, falsesizeof(visit));
        turn(num - 1, dir);
    }
 
    int mul = 1;
    for(int i=0;i<4;i++)
    {
        if (tob[i][0])
            ans += mul;
        mul *= 2;
    }
    cout<<ans;
    return 0;
}
 
cs

매우 간단하다. 입력을 받고 톱니바퀴를 돌리는데 범위에 맞고 방문하지 않았던 톱니바퀴가 돌아갈 상황이면 돌리면 된다.

 

 

'알고리즘 > 백준' 카테고리의 다른 글

배열 돌리기 4 (C++) GOLD IV  (0) 2020.08.28
17140. ⚾ (C++) GOLD IV  (0) 2020.08.18
2174. 로봇 시뮬레이션(C++) GOLD V  (0) 2020.08.18
17140. 이차원 배열과 연산 GOLD IV (C++)  (0) 2020.08.08
스타트 택시(C++) - GOLD V  (1) 2020.07.20

관련글 더보기

댓글 영역