boj14891 톱니바퀴 c++
2023. 7. 25. 17:26ㆍ알고리즘
코드
#include <iostream>
#include <deque>
#include <string>
#include <vector>
#include <cmath>
using namespace std;
void rotate(deque<int> &v, int dir) {
int f;
if (dir == 1) {
f = v.back();
v.pop_back();
v.push_front(f);
}
else if (dir == -1) {
f = v.front();
v.pop_front();
v.push_back(f);
}
}
int cal(vector<deque<int>> v) {
int total = 0;
for (int i = 0;i < 4;i++) {
if (v[i + 1][0] == 1) {
total += pow(2, i);
}
}
return total;
}
int main(void) {
// cin.tie(0);
// ios::sync_with_stdio(false);
int K;
vector<string> s(5);
vector<deque<int>> d(5);
vector<deque<int>> t(5);
for (int i = 1;i <= 4;i++) {
cin >> s[i];
}
for (int i = 1;i <= 4;i++) {
for (int j = 0;j < 8;j++) {
d[i].push_back(s[i][j]-'0');
}
}
cin >> K;
while (K--) {
int x, y, ty;
cin >> x >> y;
for (int i = 1;i <= 4;i++) {
t[i] = d[i];
}
int st = x;
ty = y;
rotate(d[x], y);
while (st < 4) {
if (t[st][2] != t[st + 1][6]) {
y = y * (-1);
rotate(d[st + 1], y);
st++;
}
else {
break;
}
}
st = x;
y = ty;
while (st > 1) {
if (t[st][6] != t[st - 1][2]) {
y = y * (-1);
rotate(d[st - 1], y);
st--;
}
else {
break;
}
}
}
cout << cal(d) << endl;
return 0;
}
문제 설명
시뮬레이션 문제였다. deque를 사용했다. deque는 앞, 뒤로 pop 이 가능한 자료구조이다.
구현 이슈
2, 6을 비교해야한다.
'알고리즘' 카테고리의 다른 글
백준 15686 치킨배달 c++ (2) | 2023.07.27 |
---|---|
백준 15683 c++ (0) | 2023.07.26 |
백준 14502번 - 연구소 c++ 풀이 (0) | 2023.07.22 |
백준 2410 C++ (0) | 2020.04.03 |
백준 2841 C++ (0) | 2020.03.30 |