๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐฑ์ค€/Platinum

[BOJ] 5373 : ํ๋น™

by Jaeguk 2022. 5. 16.
๋ฌธ์ œ ๋งํฌ

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

 

5373๋ฒˆ: ํ๋น™

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ ํ๋ธŒ๋ฅผ ๋ชจ๋‘ ๋Œ๋ฆฐ ํ›„์˜ ์œ— ๋ฉด์˜ ์ƒ‰์ƒ์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ๋’ท ๋ฉด๊ณผ ์ ‘ํ•˜๋Š” ์นธ์˜ ์ƒ‰์„ ์ถœ๋ ฅํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ ์ค„์€ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ํฐ์ƒ‰์€ w, ๋…ธ๋ž€

www.acmicpc.net

ํ๋ธŒ ๋Œ๋ฆฌ๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ตฌํ˜„๋ฌธ์ œ.

ํ’€์ด

์ •๋ง ๊ทธ๋ƒฅ ๋…ธ๊ฐ€๋‹ค๋กœ ํ๋ธŒ๋ฅผ ๋Œ๋ฆด๋•Œ๋งˆ๋‹ค 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<intint>vector<pair<intint>>, greater<pair<intint>>> 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

728x90