[백준 14891번 C/C++] 톱니바퀴
[백준 14891번 C/C++] 톱니바퀴
https://www.acmicpc.net/problem/14891
해결방안
구현
#include<algorithm>
- rotate(v.begin(), v.begin() + 1, v.end());
- 왼쪽 회전
- rotate(v.begin(), v.end() - 1, v.end());
- 오른쪽 회전
코드
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int k, input, rDir;
string inputNumber;
vector<int> v1, v2, v3, v4;
void Rotate(vector<int>& v, int dir)
{
if (dir == -1)
{
rotate(v.begin(), v.begin() + 1, v.end());
return;
}
else if (dir == 1)
{
rotate(v.begin(), v.end() - 1, v.end());
return;
}
else
return;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
v1.resize(8);
v2.resize(8);
v3.resize(8);
v4.resize(8);
cin >> inputNumber;
for (int i = 0; i < 8; i++) {
v1[i] = inputNumber[i] - '0';
}
cin >> inputNumber;
for (int i = 0; i < 8; i++) {
v2[i] = inputNumber[i] - '0';
}
cin >> inputNumber;
for (int i = 0; i < 8; i++) {
v3[i] = inputNumber[i] - '0';
}
cin >> inputNumber;
for (int i = 0; i < 8; i++) {
v4[i] = inputNumber[i] - '0';
}
cin >> k;
for (int i = 0; i < k; i++) {
cin >> input;
if (input == 1) {
cin >> rDir;
if (v1[2] != v2[6] && v2[2] != v3[6] && v3[2] != v4[6])
{
Rotate(v1, rDir);
Rotate(v2, -rDir);
Rotate(v3, rDir);
Rotate(v4, -rDir);
}
else if (v1[2] != v2[6] && v2[2] != v3[6] && v3[2] == v4[6])
{
Rotate(v1, rDir);
Rotate(v2, -rDir);
Rotate(v3, rDir);
}
else if (v1[2] != v2[6] && v2[2] == v3[6])
{
Rotate(v1, rDir);
Rotate(v2, -rDir);
}
else if (v1[2] == v2[6])
Rotate(v1, rDir);
}
else if (input == 2) {
cin >> rDir;
if (v1[2] != v2[6] && v2[2] != v3[6] && v3[2] != v4[6])
{
Rotate(v1, -rDir);
Rotate(v2, rDir);
Rotate(v3, -rDir);
Rotate(v4, rDir);
}
else if (v1[2] != v2[6] && v2[2] != v3[6] && v3[2] == v4[6])
{
Rotate(v1, -rDir);
Rotate(v2, rDir);
Rotate(v3, -rDir);
}
else if (v1[2] != v2[6] && v2[2] == v3[6])
{
Rotate(v1, -rDir);
Rotate(v2, rDir);
}
else if (v1[2] == v2[6] && v2[2] != v3[6] && v3[2] != v4[6])
{
Rotate(v2, rDir);
Rotate(v3, -rDir);
Rotate(v4, rDir);
}
else if (v1[2] == v2[6] && v2[2] != v3[6] && v3[2] == v4[6])
{
Rotate(v2, rDir);
Rotate(v3, -rDir);
}
else if (v1[2] == v2[6] && v2[2] == v3[6])
{
Rotate(v2, rDir);
}
}
else if (input == 3) {
cin >> rDir;
if (v1[2] != v2[6] && v2[2] != v3[6] && v3[2] != v4[6])
{
Rotate(v1, rDir);
Rotate(v2, -rDir);
Rotate(v3, rDir);
Rotate(v4, -rDir);
}
else if (v1[2] == v2[6] && v2[2] != v3[6] && v3[2] != v4[6])
{
Rotate(v2, -rDir);
Rotate(v3, rDir);
Rotate(v4, -rDir);
}
else if (v1[2] != v2[6] && v2[2] != v3[6] && v3[2] == v4[6])
{
Rotate(v1, rDir);
Rotate(v2, -rDir);
Rotate(v3, rDir);
}
else if (v1[2] == v2[6] && v2[2] != v3[6] && v3[2] == v4[6])
{
Rotate(v2, -rDir);
Rotate(v3, rDir);
}
else if (v2[2] == v3[6] && v3[2] != v4[6])
{
Rotate(v3, rDir);
Rotate(v4, -rDir);
}
else if (v2[2] == v3[6] && v3[2] == v4[6])
{
Rotate(v3, rDir);
}
}
else if (input == 4) {
cin >> rDir;
if (v3[2] != v4[6] && v2[2] != v3[6] && v1[2] != v2[6])
{
Rotate(v4, rDir);
Rotate(v3, -rDir);
Rotate(v2, rDir);
Rotate(v1, -rDir);
}
else if (v3[2] != v4[6] && v2[2] != v3[6] && v1[2] == v2[6])
{
Rotate(v4, rDir);
Rotate(v3, -rDir);
Rotate(v2, rDir);
}
else if (v3[2] != v4[6] && v2[2] == v3[6])
{
Rotate(v4, rDir);
Rotate(v3, -rDir);
}
else if (v3[2] == v4[6])
Rotate(v4, rDir);
}
}
cout << v1[0] + v2[0] * 2 + v3[0] * 4 + v4[0] * 8;
return 0;
}
더 나은 풀이
BFS를 활용한 풀이
다른 사람의 해설참조
https://www.acmicpc.net/source/62886223
https://www.acmicpc.net/source/44445769
'⭐ 코딩테스트 > 백준' 카테고리의 다른 글
[백준 1780번 C/C++] 종이의 개수 (0) | 2023.07.05 |
---|---|
[백준 1992번 C/C++] 쿼드트리 (0) | 2023.07.04 |
[백준 11279번 C/C++] 최대 힙 (0) | 2023.07.03 |
[백준 10866번 C/C++] 덱 (0) | 2023.07.01 |
[백준 2805번 C/C++] 나무 자르기 (0) | 2023.06.27 |
댓글
이 글 공유하기
다른 글
-
[백준 1780번 C/C++] 종이의 개수
[백준 1780번 C/C++] 종이의 개수
2023.07.05 -
[백준 1992번 C/C++] 쿼드트리
[백준 1992번 C/C++] 쿼드트리
2023.07.04 -
[백준 11279번 C/C++] 최대 힙
[백준 11279번 C/C++] 최대 힙
2023.07.03 -
[백준 10866번 C/C++] 덱
[백준 10866번 C/C++] 덱
2023.07.01