Baek_5373

원성혁·2023년 1월 17일
0

algorithm

목록 보기
19/21
post-thumbnail

요즘 알고리즘 연습을 제대로 못하고 있고 발전도 더딘거 같았다. 삼성 기출집에 플레 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규칙을 찾지는 않고 그냥 노가다로 작성했다.
첫 플레 문제 해결과 점수를 얻어서 기분 좋았다ㅎ

profile
AI개발자를 향해 전진중

0개의 댓글