Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- dp
- find
- 코딩스킬
- Set
- 브루트포스
- 모의SW역량테스트
- 이런게4문제
- 백트래킹
- 레벨3
- 문자열
- 프로그래머스
- Map
- swea
- dfs
- 삼성SW역량테스트
- 완전탐색
- C++
- KAKAO
- 백준
- 삼성
- Sort
- substr
- 레벨2
- BFS
- 삼성SW테스트
- priority_queue
- 시뮬레이션
- 코딩테스트
- 2018
- STL
Archives
- Today
- Total
-
[삼성SW테스트] 백준 14891번 - 톱니바퀴 (정답률 50%) 본문
https://www.acmicpc.net/problem/14891
삼성 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<int, int> > 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);
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 < 1) break;
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 > 4) break;
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);
}
}
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 |
'1-1. 삼성 SW 테스트' 카테고리의 다른 글
[삼성SW테스트] 백준 14888번 - 연산자 끼워넣기 (정답률 47%) (0) | 2020.01.11 |
---|---|
[삼성SW테스트] 백준 14889번 - 스타트와 링크 (정답률 50%) (0) | 2020.01.11 |
[삼성SW테스트] 백준 15683번 - 감시 (정답률 39%) (0) | 2020.01.09 |
[삼성SW테스트] 백준 15684번 - 사다리 조작 (0) | 2020.01.06 |
[삼성SW테스트] 백준 15685번 - 드래곤 커브 (0) | 2020.01.06 |
Comments