-

[삼성SW테스트] 백준 14891번 - 톱니바퀴 (정답률 50%) 본문

1-1. 삼성 SW 테스트

[삼성SW테스트] 백준 14891번 - 톱니바퀴 (정답률 50%)

asdklfjlasdlfkj 2020. 1. 10. 00:08

https://www.acmicpc.net/problem/14891

 

14891번: 톱니바퀴

첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터 시계방향 순서대로 주어진다. N극은 0, S극은 1로 나타나있다. 다섯째 줄에는 회전 횟수 K(1 ≤ K ≤ 100)가 주어진다. 다음 K개 줄에는 회전시킨 방법이 순서대로 주어진다. 각 방법은 두 개의 정수로 이루어져 있고, 첫 번째 정수는 회전시킨 톱니바퀴

www.acmicpc.net

삼성 SW 테스트 기출문제다. (시뮬레이션)

주어진 조건을 꼼꼼히 보는게 가장 관건인 시뮬레이션 유형이다.

K번 루프 내에서 주어지는 톱니의 번호와 방향을 기준으로 양 옆의 톱니 가운데 돌릴 톱니와 방향을 '미리' 정해주고 톱니들을 돌리는 것이 핵심이다.

 

즉, 루프에서 입력한 톱니와 방향을 돌리고 나서 양 옆의 톱니들을 살피는 것이 아니라, '미리' 톱니들의 회전을 파악하고 그대로 톱니들을 돌려야 한다.

 

조건대로 시뮬레이션 코드를 작성하면 아래와 같다. (0ms)

 

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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
vector<vector<char> > topnis;
vector<pair<intint> > Left, Right;
 
void rotate(int index, int dir){
    if (dir == 1){
        topnis[index][0= topnis[index][8];
        for (int i = 7; i >= 1; i--){
            topnis[index][i + 1= topnis[index][i];
        }
        topnis[index][1= topnis[index][0];
    }
    else if (dir == -1){
        topnis[index][0= topnis[index][1];
        for (int i = 1; i <= 7; i++){
            topnis[index][i] = topnis[index][i + 1];
        }
        topnis[index][8= topnis[index][0];
    }
}
 
int getanswer(){
    int sum = 0;
    for (int i = 1; i <= 4; i++){
        if (i == 1){
            if (topnis[i][1== '1')
                sum += 1;
        }
        else if (i == 2){
            if (topnis[i][1== '1')
                sum += 2;
        }
 
        else if (i == 3){
            if (topnis[i][1== '1')
                sum += 4;
        }
 
        else if (i == 4){
            if (topnis[i][1== '1')
                sum += 8;
        }
    }
    return sum;
}
 
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
 
    topnis.assign(5vector<char>(9' '));
    string str;
    for (int i = 1; i <= 4; i++){
        cin >> str;
        for (int j = 1; j <= 8; j++){
            topnis[i][j] = str[j - 1];
        }
    }
    int K;
    int which, dir;
    cin >> K;
    for (int i = 0; i < K; i++){
        cin >> which >> dir;
        int lr, ll, rl, rr;
        lr = topnis[which][7];
        rl = topnis[which][3];
        int l_dir = -dir;
        int r_dir = -dir;
        for (int j = which - 1; j >= 1; j--){
            // 왼쪽 관찰.
            ll = topnis[j][3];
 
            if (ll == lr) break;
            else{
                Left.push_back(make_pair(j, l_dir));
                l_dir = l_dir * (-1);
                if (j - 1 < 1break;
                else{
                    lr = topnis[j][7];
                }
            }
        }
 
 
        for (int j = which + 1; j <= 4; j++){
            // 오른쪽 관찰.
            rr = topnis[j][7];
 
            if (rl == rr) break;
            else{
                Right.push_back(make_pair(j, r_dir));
                r_dir = r_dir * (-1);
                if (j + 1 > 4break;
                else{
                    rl = topnis[j][3];
                }
            }
        }
        rotate(which, dir);
        for (int j = 0; j < Left.size(); j++){
            int cur_which = Left[j].first;
            int cur_dir = Left[j].second;
            rotate(cur_which, cur_dir);
        }
        for (int j = 0; j < Right.size(); j++){
            int cur_which = Right[j].first;
            int cur_dir = Right[j].second;
            rotate(cur_which, cur_dir);
        }
        Left.clear();
        Right.clear();
    }
    cout << getanswer() << '\n';
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

Comments