๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/5373
ํ๋ธ ๋๋ฆฌ๋ ๊ฒ์ ๊ตฌํํ๋ ๊ตฌํ๋ฌธ์ .
ํ์ด
์ ๋ง ๊ทธ๋ฅ ๋ ธ๊ฐ๋ค๋ก ํ๋ธ๋ฅผ ๋๋ฆด๋๋ง๋ค 6๋ฉด์ ๋ณํ๋ฅผ ๊ตฌํํ๋ ๊ตฌํ๋ฌธ์ ์ด๋ค.
ํ๋ธ๋ฅผ ํ ๋ฒ ๋๋ฆฌ๋ฉด ๋๋ฆด ๋ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๋ฉด์ ๋ฐ๋์ชฝ ๋ฉด์ ์ ์ธํ 5๋ฉด์ ํ์ ํ ๊ตฌ์ฑ์ด ๋ฐ๋๋ค.
๋ฐ๋ผ๋ณด๊ณ ์๋ ๋ฉด์ ๋๋ฆฌ๋ ๋ฐฉํฅ์ ๋ฐ๋ผ ์๊ณ๋ฐฉํฅ ๋๋ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ๋ธ๊ฐ ๋ฐ๋ ๊ฒ์ด๊ณ , ๋ฐ๋ผ๋ณด๊ณ ์๋ ๋ฉด๊ณผ ์ ํ๋ 4๊ฐ์ ๋ฉด์ 9์นธ ์ค 3์นธ์ด ํ์ ํ๋ค.
ํ๋ธ๋ฅผ ๋๋ฆฌ๋ฉด ์ด๋ป๊ฒ ๋ ์ง ์ ์๊ฐํ๋ฉด์ ์ฝ๋๋ฅผ ๊ตฌํํ๋ฉด ๋๋ค.
๋ค ๊ตฌํํ๋๋ฐ ๊ณ์ 50ํ๋ก์์ ํ๋ ธ์ต๋๋ค๊ฐ ๋์๋ค. ์ค๋ฅ๋ฅผ ์ฐพ๊ธฐ ์ํด ๊ฒฐ๊ตญ ์ง์ง ํ๋ธ๋ฅผ ๋๋ ค๊ฐ๋ฉด์ ์ค๋ฅ๋ฅผ ์ฐพ์๋ค.
์ฌ์ค ์์ฒญ๋๊ฒ ์ด๋ ค์ด ๊ฑด ์๋์ง๋ง ๊น๋ค๋กญ๊ณ ์ค์๊ฐ ๋ฐ์ํด๋ ์ด๋์ ๋ฐ์ํ๋์ง ์ฐพ๊ธฐ๊ฐ ์ด๋ ต๋ค.
ํ๋ธ์ ๊ฐ ๋ฉด์ 3x3 ์บ๋ฆญํฐ ๋ฐฐ์ด์ 6๊ฐ ๋ง๋ค์ด์ ํํํ๋ค.
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
120
121
122
123
124
|
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <stack>
#include <vector>
#include <math.h>
#include <queue>
#include <climits>
#include <algorithm>
#include <iomanip>
#include <map>
#define mod 998244353
using namespace std;
typedef long long ll;
typedef priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> Priority_queue;
const int INF = INT_MAX;
char Cube[6][4][4];
int T;
int n;
void Set_Cube();
void turn_Cube(char Where, char direction);
void print_Cube();
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> T;
while (T--) {
Set_Cube();
cin >> n;
char Where, direction;
for (int i = 0; i < n; i++) {
cin >> Where >> direction;
turn_Cube(Where, direction);
}
print_Cube();
}
return 0;
}
void Set_Cube() {
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
Cube[0][i][j] = 'w';
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
Cube[1][i][j] = 'y';
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
Cube[2][i][j] = 'r';
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
Cube[3][i][j] = 'o';
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
Cube[4][i][j] = 'g';
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
Cube[5][i][j] = 'b';
}
void turn_Cube(char Where, char direction) {
// 0 : ์, 1 : ์๋, 2 : ์, 3 : ๋ค, 4 : ์ข, 5 : ์ฐ
// + : ์๊ณ, - : ๋ฐ์๊ณ
if (Where == 'U') {
if (direction == '+') {// ์๋ฉด์ ์๊ณ๋ฐฉํฅ
char temp[6][3];
for (int j = 0; j < 6; j++) {
for (int i = 0; i < 3; i++) {
temp[j][i] = Cube[j][0][i];
}
}
for (int i = 0; i < 3; i++) {
Cube[5][0][i] = temp[3][i];
Cube[2][0][i] = temp[5][i];
Cube[4][0][i] = temp[2][i];
Cube[3][0][i] = temp[4][i];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
temp[i][j] = Cube[0][i][j];
}
for (int i = 0; i < 3; i++) {
Cube[0][i][2] = temp[0][i];
Cube[0][i][1] = temp[1][i];
Cube[0][i][0] = temp[2][i];
}
}
else if (direction == '-') { // ์๋ฉด์ ๋ฐ์๊ณ๋ฐฉํฅ
char temp[6][3];
for (int j = 0; j < 6; j++) {
for (int i = 0; i < 3; i++) {
temp[j][i] = Cube[j][0][i];
}
}
for (int i = 0; i < 3; i++) {
Cube[3][0][i] = temp[5][i];
Cube[4][0][i] = temp[3][i];
Cube[2][0][i] = temp[4][i];
Cube[5][0][i] = temp[2][i];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
temp[i][j] = Cube[0][i][j];
}
for (int i = 0; i < 3; i++) {
Cube[0][i][2] = temp[2][2 - i];
Cube[0][i][1] = temp[1][2 - i];
Cube[0][i][0] = temp[0][2 - i];
}
}
}
else if (Where == 'D') {
if (direction == '+') { //์๋๋ฅผ ์๊ณ๋ฐฉํฅ
char temp[6][3];
for (int j = 0; j < 6; j++) {
for (int i = 0; i < 3; i++) {
temp[j][i] = Cube[j][2][i];
}
}
for (int i = 0; i < 3; i++) {
Cube[5][2][i] = temp[2][i];
Cube[3][2][i] = temp[5][i];
Cube[4][2][i] = temp[3][i];
Cube[2][2][i] = temp[4][i];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
temp[i][j] = Cube[1][i][j];
}
for (int i = 0; i < 3; i++) {
Cube[1][i][2] = temp[0][i];
Cube[1][i][1] = temp[1][i];
Cube[1][i][0] = temp[2][i];
}
}
else if (direction == '-') { // ์๋ ๋ฐ์๊ณ๋ฐฉํฅ
char temp[6][3];
for (int j = 0; j < 6; j++) {
for (int i = 0; i < 3; i++) {
temp[j][i] = Cube[j][2][i];
}
}
for (int i = 0; i < 3; i++) {
Cube[4][2][i] = temp[2][i];
Cube[3][2][i] = temp[4][i];
Cube[5][2][i] = temp[3][i];
Cube[2][2][i] = temp[5][i];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
temp[i][j] = Cube[1][i][j];
}
for (int i = 0; i < 3; i++) {
Cube[1][i][2] = temp[2][2 - i];
Cube[1][i][1] = temp[1][2 - i];
Cube[1][i][0] = temp[0][2 - i];
}
}
}
else if (Where == 'F') {
if (direction == '+') { //์๋ฉด์ ์๊ณ๋ฐฉํฅ
char temp[6][3];
for (int i = 0; i < 3; i++) {
temp[0][i] = Cube[0][2][i];
temp[5][i] = Cube[5][i][0];
temp[1][i] = Cube[1][0][i];
temp[4][i] = Cube[4][i][2];
}
for (int i = 0; i < 3; i++) {
Cube[5][i][0] = temp[0][i];
Cube[1][0][i] = temp[5][2 - i];
Cube[4][i][2] = temp[1][i];
Cube[0][2][i] = temp[4][2 - i];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
temp[i][j] = Cube[2][i][j];
}
for (int i = 0; i < 3; i++) {
Cube[2][i][2] = temp[0][i];
Cube[2][i][1] = temp[1][i];
Cube[2][i][0] = temp[2][i];
}
}
else if (direction == '-') {
char temp[6][3];
for (int i = 0; i < 3; i++) {
temp[0][i] = Cube[0][2][i];
temp[5][i] = Cube[5][i][0];
temp[1][i] = Cube[1][0][i];
temp[4][i] = Cube[4][i][2];
}
for (int i = 0; i < 3; i++) {
Cube[5][i][0] = temp[1][2 - i];
Cube[1][0][i] = temp[4][i];
Cube[4][i][2] = temp[0][2 - i];
Cube[0][2][i] = temp[5][i];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
temp[i][j] = Cube[2][i][j];
}
for (int i = 0; i < 3; i++) {
Cube[2][i][2] = temp[2][2 - i];
Cube[2][i][1] = temp[1][2 - i];
Cube[2][i][0] = temp[0][2 - i];
}
}
}
else if (Where == 'B') {
if (direction == '+') {
char temp[6][3];
for (int i = 0; i < 3; i++) {
temp[0][i] = Cube[0][0][i];
temp[5][i] = Cube[5][i][2];
temp[1][i] = Cube[1][2][i];
temp[4][i] = Cube[4][i][0];
}
for (int i = 0; i < 3; i++) {
Cube[5][i][2] = temp[1][2 - i];
Cube[1][2][i] = temp[4][i];
Cube[4][i][0] = temp[0][2 - i];
Cube[0][0][i] = temp[5][i];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
temp[i][j] = Cube[3][i][j];
}
for (int i = 0; i < 3; i++) {
Cube[3][i][2] = temp[0][i];
Cube[3][i][1] = temp[1][i];
Cube[3][i][0] = temp[2][i];
}
}
else if (direction == '-') {
char temp[6][3];
for (int i = 0; i < 3; i++) {
temp[0][i] = Cube[0][0][i];
temp[5][i] = Cube[5][i][2];
temp[1][i] = Cube[1][2][i];
temp[4][i] = Cube[4][i][0];
}
for (int i = 0; i < 3; i++) {
Cube[5][i][2] = temp[0][i];
Cube[1][2][i] = temp[5][2 - i];
Cube[4][i][0] = temp[1][i];
Cube[0][0][i] = temp[4][2 - i];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
temp[i][j] = Cube[3][i][j];
}
for (int i = 0; i < 3; i++) {
Cube[3][i][2] = temp[2][2 - i];
Cube[3][i][1] = temp[1][2 - i];
Cube[3][i][0] = temp[0][2 - i];
}
}
}
else if (Where == 'L') {
if (direction == '+') {
char temp[6][3];
for (int i = 0; i < 3; i++) {
temp[0][i] = Cube[0][i][0];
temp[2][i] = Cube[2][i][0];
temp[1][i] = Cube[1][i][0];
temp[3][i] = Cube[3][i][2];
}
for (int i = 0; i < 3; i++) {
Cube[0][i][0] = temp[3][2 - i];
Cube[2][i][0] = temp[0][i];
Cube[1][i][0] = temp[2][i];
Cube[3][i][2] = temp[1][2 - i];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
temp[i][j] = Cube[4][i][j];
}
for (int i = 0; i < 3; i++) {
Cube[4][i][2] = temp[0][i];
Cube[4][i][1] = temp[1][i];
Cube[4][i][0] = temp[2][i];
}
}
else if (direction == '-') {
char temp[6][3];
for (int i = 0; i < 3; i++) {
temp[0][i] = Cube[0][i][0];
temp[2][i] = Cube[2][i][0];
temp[1][i] = Cube[1][i][0];
temp[3][i] = Cube[3][i][2];
}
for (int i = 0; i < 3; i++) {
Cube[0][i][0] = temp[2][i];
Cube[2][i][0] = temp[1][i];
Cube[1][i][0] = temp[3][2 - i];
Cube[3][i][2] = temp[0][2 - i];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
temp[i][j] = Cube[4][i][j];
}
for (int i = 0; i < 3; i++) {
Cube[4][i][2] = temp[2][2 - i];
Cube[4][i][1] = temp[1][2 - i];
Cube[4][i][0] = temp[0][2 - i];
}
}
}
else if (Where == 'R') {
if (direction == '+') {
char temp[6][3];
for (int i = 0; i < 3; i++) {
temp[0][i] = Cube[0][i][2];
temp[2][i] = Cube[2][i][2];
temp[1][i] = Cube[1][i][2];
temp[3][i] = Cube[3][i][0];
}
for (int i = 0; i < 3; i++) {
Cube[0][i][2] = temp[2][i];
Cube[3][i][0] = temp[0][2 - i];
Cube[1][i][2] = temp[3][2 - i];
Cube[2][i][2] = temp[1][i];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
temp[i][j] = Cube[5][i][j];
}
for (int i = 0; i < 3; i++) {
Cube[5][i][2] = temp[0][i];
Cube[5][i][1] = temp[1][i];
Cube[5][i][0] = temp[2][i];
}
}
else if (direction == '-') {
char temp[6][3];
for (int i = 0; i < 3; i++) {
temp[0][i] = Cube[0][i][2];
temp[2][i] = Cube[2][i][2];
temp[1][i] = Cube[1][i][2];
temp[3][i] = Cube[3][i][0];
}
for (int i = 0; i < 3; i++) {
Cube[0][i][2] = temp[3][2 - i];
Cube[2][i][2] = temp[0][i];
Cube[1][i][2] = temp[2][i];
Cube[3][i][0] = temp[1][2 - i];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
temp[i][j] = Cube[5][i][j];
}
for (int i = 0; i < 3; i++) {
Cube[5][i][2] = temp[2][2 - i];
Cube[5][i][1] = temp[1][2 - i];
Cube[5][i][0] = temp[0][2 - i];
}
}
}
}
void print_Cube() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << Cube[0][i][j];
}
cout << "\n";
}
}
|
cs |
'๋ฐฑ์ค > Platinum' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 23289 : ์จํ๊ธฐ ์๋ ! (0) | 2022.06.09 |
---|---|
[BOJ] 10251 : ์ด์ ๋ฉดํ ์ํ (0) | 2022.03.25 |
[BOJ] 1028 : ๋ค์ด์๋ชฌ๋ ๊ด์ฐ (0) | 2022.03.23 |
[BOJ] 13308 : ์ฃผ์ ์ (0) | 2022.03.15 |
[BOJ] 10272 : ํ์๊ธ ์ฌ๋ฅ๊พผ ๊น์ ์ (0) | 2022.03.11 |