요즘 알고리즘 연습을 제대로 못하고 있고 발전도 더딘거 같았다. 삼성 기출집에 플레 5 구현중 큐빙은 언뜻 보면 어려워 보이지 않는 큐브 구조의 이동을 시뮬레이션 화 하는 문제 같았고 한번 풀어보기로 했다.
import sys
input = sys.stdin.readline
T = int(input())
def turn_plus(n):
temp = [['']*3 for _ in range(3)]
temp[0][0] = cube[n][2][0]
temp[0][1] = cube[n][1][0]
temp[0][2] = cube[n][0][0]
temp[1][0] = cube[n][2][1]
temp[1][1] = cube[n][1][1]
temp[1][2] = cube[n][0][1]
temp[2][0] = cube[n][2][2]
temp[2][1] = cube[n][1][2]
temp[2][2] = cube[n][0][2]
for i in range(3):
for j in range(3):
cube[n][i][j] = temp[i][j]
def turn_minus(n):
temp = [['']*3 for _ in range(3)]
temp[0][0] = cube[n][0][2]
temp[0][1] = cube[n][1][2]
temp[0][2] = cube[n][2][2]
temp[1][0] = cube[n][0][1]
temp[1][1] = cube[n][1][1]
temp[1][2] = cube[n][2][1]
temp[2][0] = cube[n][0][0]
temp[2][1] = cube[n][1][0]
temp[2][2] = cube[n][2][0]
for i in range(3):
for j in range(3):
cube[n][i][j] = temp[i][j]
def move_U(dir):
# g1,g2,g3= cube[1][0][0],cube[1][0][1],cube[1][0][2]
# o1,o2,o3= cube[2][2][2],cube[2][2][1],cube[2][2][0]
# b1,b2,b3 = cube[3][0][0],cube[3][0][1],cube[3][0][2]
# r1,r2,r3 = cube[4][0][0], cube[4][0][1], cube[4][0][2]
if dir == '+':
turn_plus(0)
temp1, temp2, temp3 = cube[1][0][0], cube[1][0][1], cube[1][0][2]
cube[1][0][0], cube[1][0][1], cube[1][0][2] = cube[4][0][0], cube[4][0][1], cube[4][0][2]
cube[4][0][0], cube[4][0][1], cube[4][0][2] = cube[3][0][0], cube[3][0][1], cube[3][0][2]
cube[3][0][0], cube[3][0][1], cube[3][0][2] = cube[2][2][2], cube[2][2][1], cube[2][2][0]
cube[2][2][2], cube[2][2][1], cube[2][2][0] = temp1, temp2, temp3
else:
turn_minus(0)
temp1, temp2, temp3 = cube[1][0][0], cube[1][0][1], cube[1][0][2]
cube[1][0][0], cube[1][0][1], cube[1][0][2] = cube[2][2][2], cube[2][2][1], cube[2][2][0]
cube[2][2][2], cube[2][2][1], cube[2][2][0] = cube[3][0][0], cube[3][0][1], cube[3][0][2]
cube[3][0][0], cube[3][0][1], cube[3][0][2] = cube[4][0][0], cube[4][0][1], cube[4][0][2]
cube[4][0][0], cube[4][0][1], cube[4][0][2] = temp1, temp2, temp3
def move_D(dir):
# g1,g2,g3 = cube[1][2][2],cube[1][2][1],cube[1][2][0]
# r1,r2,r3 = cube[4][2][2],cube[4][2][1],cube[4][2][0]
# b1,b2,b3 = cube[3][2][2],cube[3][2][1],cube[3][2][0]
# o1,o2,o3 = cube[2][0][0],cube[2][0][1],cube[2][0][2]
if dir == '+':
turn_plus(5)
temp1, temp2, temp3 = cube[1][2][2], cube[1][2][1], cube[1][2][0]
cube[1][2][2], cube[1][2][1], cube[1][2][0] = cube[2][0][0], cube[2][0][1], cube[2][0][2]
cube[2][0][0], cube[2][0][1], cube[2][0][2] = cube[3][2][2], cube[3][2][1], cube[3][2][0]
cube[3][2][2], cube[3][2][1], cube[3][2][0] = cube[4][2][2], cube[4][2][1], cube[4][2][0]
cube[4][2][2], cube[4][2][1], cube[4][2][0] = temp1, temp2, temp3
else:
turn_minus(5)
temp1, temp2, temp3 = cube[1][2][2], cube[1][2][1], cube[1][2][0]
cube[1][2][2], cube[1][2][1], cube[1][2][0] = cube[4][2][2], cube[4][2][1], cube[4][2][0]
cube[4][2][2], cube[4][2][1], cube[4][2][0] = cube[3][2][2], cube[3][2][1], cube[3][2][0]
cube[3][2][2], cube[3][2][1], cube[3][2][0] = cube[2][0][0], cube[2][0][1], cube[2][0][2]
cube[2][0][0], cube[2][0][1], cube[2][0][2] = temp1, temp2, temp3
def move_L(dir):
# o1,o2,o3 = cube[2][2][0], cube[2][1][0], cube[2][0][0]
# w1, w2, w3 = cube[0][2][0], cube[0][1][0], cube[0][0][0]
# r1,r2,r3 = cube[4][2][0], cube[4][1][0], cube[4][0][0]
# y1, y2, y3 = cube[5][2][0], cube[5][1][0], cube[5][0][0]
if dir == '+':
turn_plus(1)
temp1, temp2, temp3 = cube[2][2][0], cube[2][1][0], cube[2][0][0]
cube[2][2][0], cube[2][1][0], cube[2][0][0] = cube[5][2][0], cube[5][1][0], cube[5][0][0]
cube[5][2][0], cube[5][1][0], cube[5][0][0] = cube[4][2][0], cube[4][1][0], cube[4][0][0]
cube[4][2][0], cube[4][1][0], cube[4][0][0] = cube[0][2][0], cube[0][1][0], cube[0][0][0]
cube[0][2][0], cube[0][1][0], cube[0][0][0] = temp1, temp2, temp3
else:
turn_minus(1)
temp1, temp2, temp3 = cube[2][2][0], cube[2][1][0], cube[2][0][0]
cube[2][2][0], cube[2][1][0], cube[2][0][0] = cube[0][2][0], cube[0][1][0], cube[0][0][0]
cube[0][2][0], cube[0][1][0], cube[0][0][0] = cube[4][2][0], cube[4][1][0], cube[4][0][0]
cube[4][2][0], cube[4][1][0], cube[4][0][0] = cube[5][2][0], cube[5][1][0], cube[5][0][0]
cube[5][2][0], cube[5][1][0], cube[5][0][0] = temp1, temp2, temp3
def move_R(dir):
# r1,r2,r3 = cube[4][0][2],cube[4][1][2],cube[4][2][2]
# w1,w2,w3 = cube[0][0][2],cube[0][1][2],cube[0][2][2]
# o1,o2,o3 = cube[2][0][2],cube[2][1][2],cube[2][2][2]
# y1,y2,y3 = cube[5][0][2],cube[5][1][2],cube[5][2][2]
if dir == '+':
turn_plus(3)
temp1, temp2, temp3 = cube[4][0][2], cube[4][1][2], cube[4][2][2]
cube[4][0][2], cube[4][1][2], cube[4][2][2] = cube[5][0][2], cube[5][1][2], cube[5][2][2]
cube[5][0][2], cube[5][1][2], cube[5][2][2] = cube[2][0][2], cube[2][1][2], cube[2][2][2]
cube[2][0][2], cube[2][1][2], cube[2][2][2] = cube[0][0][2], cube[0][1][2], cube[0][2][2]
cube[0][0][2], cube[0][1][2], cube[0][2][2] = temp1, temp2, temp3
else:
turn_minus(3)
temp1, temp2, temp3 = cube[4][0][2], cube[4][1][2], cube[4][2][2]
cube[4][0][2], cube[4][1][2], cube[4][2][2] = cube[0][0][2], cube[0][1][2], cube[0][2][2]
cube[0][0][2], cube[0][1][2], cube[0][2][2] = cube[2][0][2], cube[2][1][2], cube[2][2][2]
cube[2][0][2], cube[2][1][2], cube[2][2][2] = cube[5][0][2], cube[5][1][2], cube[5][2][2]
cube[5][0][2], cube[5][1][2], cube[5][2][2] = temp1, temp2, temp3
def move_F(dir):
# g1,g2,g3 = cube[1][0][2],cube[1][1][2],cube[1][2][2]
# w1,w2,w3 = cube[0][2][2],cube[0][2][1],cube[0][2][0]
# b1,b2,g3 = cube[3][2][0],cube[3][1][0],cube[3][0][0]
# y1,y2,y3 = cube[5][0][0],cube[5][0][1],cube[5][0][2]
if dir == '+':
turn_plus(4)
temp1, temp2, temp3 = cube[1][0][2], cube[1][1][2], cube[1][2][2]
cube[1][0][2], cube[1][1][2], cube[1][2][2] = cube[5][0][0], cube[5][0][1], cube[5][0][2]
cube[5][0][0], cube[5][0][1], cube[5][0][2] = cube[3][2][0], cube[3][1][0], cube[3][0][0]
cube[3][2][0], cube[3][1][0], cube[3][0][0] = cube[0][2][2], cube[0][2][1], cube[0][2][0]
cube[0][2][2], cube[0][2][1], cube[0][2][0] = temp1, temp2, temp3
else:
turn_minus(4)
temp1, temp2, temp3 = cube[1][0][2], cube[1][1][2], cube[1][2][2]
cube[1][0][2], cube[1][1][2], cube[1][2][2] = cube[0][2][2], cube[0][2][1], cube[0][2][0]
cube[0][2][2], cube[0][2][1], cube[0][2][0] = cube[3][2][0], cube[3][1][0], cube[3][0][0]
cube[3][2][0], cube[3][1][0], cube[3][0][0] = cube[5][0][0], cube[5][0][1], cube[5][0][2]
cube[5][0][0], cube[5][0][1], cube[5][0][2] = temp1, temp2, temp3
def move_B(dir):
# g1,g2,g3 = cube[1][2][0],cube[1][1][0],cube[1][0][0]
# y1,y2,y3 = cube[5][2][2],cube[5][2][1],cube[5][2][0]
# b1,b2,g3 = cube[3][0][2],cube[3][1][2],cube[3][2][2]
# w1,w2,w3 = cube[0][0][0],cube[0][0][1],cube[0][0][2]
if dir == '+':
turn_plus(2)
temp1, temp2, temp3 = cube[1][2][0], cube[1][1][0], cube[1][0][0]
cube[1][2][0], cube[1][1][0], cube[1][0][0] = cube[0][0][0], cube[0][0][1], cube[0][0][2]
cube[0][0][0], cube[0][0][1], cube[0][0][2] = cube[3][0][2], cube[3][1][2], cube[3][2][2]
cube[3][0][2], cube[3][1][2], cube[3][2][2] = cube[5][2][2], cube[5][2][1], cube[5][2][0]
cube[5][2][2], cube[5][2][1], cube[5][2][0] = temp1, temp2, temp3
else:
turn_minus(2)
temp1, temp2, temp3 = cube[1][2][0], cube[1][1][0], cube[1][0][0]
cube[1][2][0], cube[1][1][0], cube[1][0][0] = cube[5][2][2], cube[5][2][1], cube[5][2][0]
cube[5][2][2], cube[5][2][1], cube[5][2][0] = cube[3][0][2], cube[3][1][2], cube[3][2][2]
cube[3][0][2], cube[3][1][2], cube[3][2][2] = cube[0][0][0], cube[0][0][1], cube[0][0][2]
cube[0][0][0], cube[0][0][1], cube[0][0][2] = temp1, temp2, temp3
for _ in range(T):
N = int(input())
command = list(map(str, input().split()))
cube = [[['w', 'w', 'w'], ['w', 'w', 'w'], ['w', 'w', 'w']],
[['g', 'g', 'g'], ['g', 'g', 'g'], ['g', 'g', 'g']],
[['o', 'o', 'o'], ['o', 'o', 'o'], ['o', 'o', 'o']],
[['b', 'b', 'b'], ['b', 'b', 'b'], ['b', 'b', 'b']],
[['r', 'r', 'r'], ['r', 'r', 'r'], ['r', 'r', 'r']],
[['y', 'y', 'y'], ['y', 'y', 'y'], ['y', 'y', 'y']]]
for i in command:
if i[0] == 'U':
move_U(i[1])
elif i[0] == 'D':
move_D(i[1])
elif i[0] == 'L':
move_L(i[1])
elif i[0] == 'R':
move_R(i[1])
elif i[0] == 'F':
move_F(i[1])
else:
move_B(i[1])
for i in range(3):
for j in range(3):
print(cube[0][i][j], end='')
print()
특별한 스킬은 없고 정말 노가다이다.
나는 rotation규칙을 찾지는 않고 그냥 노가다로 작성했다.
첫 플레 문제 해결과 점수를 얻어서 기분 좋았다ㅎ