import sys
input = sys.stdin.readline
from copy import deepcopy
def turnplane(x):
plane = [[0]*3 for i in range(3)]
for i in range(3):
for j in range(3):
plane[j][2-i] = cube[x][i][j]
cube[x] = plane
#옆면 4개는 앞에서 바라볼때 기준 윗면 아랫면은 대칭
def turnside(x):
if x == "U":
a,b,c = cube["F"][0]
cube["F"][0] = [*cube["R"][0]]
cube["R"][0] = [*cube["B"][0]]
cube["B"][0] = [*cube["L"][0]]
cube["L"][0] = [a,b,c]
elif x == "D":
a,b,c = cube["F"][2]
cube["F"][2] = [*cube["L"][2]]
cube["L"][2] = [*cube["B"][2]]
cube["B"][2] = [*cube["R"][2]]
cube["R"][2] = [a,b,c]
elif x == "F":
a,b,c = cube["U"][2]
cube["U"][2] = [cube["L"][2][2],cube["L"][1][2],cube["L"][0][2]]
cube["L"][2][2],cube["L"][1][2],cube["L"][0][2] = cube["D"][2]
cube["D"][2] = [cube["R"][0][0],cube["R"][1][0],cube["R"][2][0]]
cube["R"][0][0],cube["R"][1][0],cube["R"][2][0] = a,b,c
elif x == "B":
a,b,c = cube["U"][0]
cube["U"][0] = [cube["R"][0][2],cube["R"][1][2],cube["R"][2][2]]
cube["R"][0][2],cube["R"][1][2],cube["R"][2][2] = cube["D"][0]
cube["D"][0] = [cube["L"][2][0],cube["L"][1][0],cube["L"][0][0]]
cube["L"][2][0],cube["L"][1][0],cube["L"][0][0] = a,b,c
elif x == "L":
a,b,c = cube["U"][0][0],cube["U"][1][0],cube["U"][2][0]
cube["U"][0][0],cube["U"][1][0],cube["U"][2][0] = cube["B"][2][2],cube["B"][1][2],cube["B"][0][2]
cube["B"][2][2],cube["B"][1][2],cube["B"][0][2] = cube["D"][2][2],cube["D"][1][2],cube["D"][0][2]
cube["D"][2][2],cube["D"][1][2],cube["D"][0][2] = cube["F"][0][0],cube["F"][1][0],cube["F"][2][0]
cube["F"][0][0],cube["F"][1][0],cube["F"][2][0] = a,b,c
elif x == "R":
a,b,c = cube["U"][2][2],cube["U"][1][2],cube["U"][0][2]
cube["U"][2][2],cube["U"][1][2],cube["U"][0][2] = cube["F"][2][2],cube["F"][1][2],cube["F"][0][2]
cube["F"][2][2],cube["F"][1][2],cube["F"][0][2] = cube["D"][0][0],cube["D"][1][0],cube["D"][2][0]
cube["D"][0][0],cube["D"][1][0],cube["D"][2][0] = cube["B"][0][0],cube["B"][1][0],cube["B"][2][0]
cube["B"][0][0],cube["B"][1][0],cube["B"][2][0] = a,b,c
T = int(input())
for _ in range(T):
cube = {i:[[0]*3 for _ in range(3)] for i in "UDFBLR"}
for n in range(6):
for i in range(3):
for j in range(3):
cube["UDFBLR"[n]][i][j] = "wyrogb"[n]
N = int(input())
data = [*input().split()]
for i in range(N):
x,d = data[i]
if d == "+":
turnplane(x)
turnside(x)
else:
for _ in range(3):
turnplane(x)
turnside(x)
print(*map(lambda x:"".join(x),cube["U"]),sep="\n")
노가다의 끝판왕 문제
코드 짜는데도 한세월이고 디버깅도 만만치않다.
알고리즘적으로 어려운 점은 단 하나도 없다.
그나마 알고리즘적이라 할만한건 시계 반대방향으로 돌리는건 시계방향으로 3번 돌리는 것과 같다 정도? 근데 이건 뭐 누구나 생각할 수 있는거고
현재 면에 대해서 90도 돌리는 turnplane 함수와, 현재 면을 돌릴때 일어나는 turnside 함수를 만들어주면 끝이다.
하지만 turnside 함수를 만드는게 정말 말 그대로 노가다라서...
머릿속으로 큐브를 그리고 돌릴 때마다 일어나는 변화를 상상하면 좀 더 쉽게 만들 수 있을 것이다.
오늘의 교훈) 단순 노가다 문제도 플래티넘이 될 수 있다?!