Algorithm/Python

[백준 5373] 큐빙

🥭맹2 2021. 4. 19. 04:01

1. 문제

www.acmicpc.net/problem/5373

 

5373번: 큐빙

각 테스트 케이스에 대해서 큐브를 모두 돌린 후의 윗 면의 색상을 출력한다. 첫 번째 줄에는 뒷 면과 접하는 칸의 색을 출력하고, 두 번째, 세 번째 줄은 순서대로 출력하면 된다. 흰색은 w, 노란

www.acmicpc.net

2. 접근 방법

전개도 그려서 노가다 한 문제

 

큐브를 일차원 리스트로 만들고, 인덱스로 면(윗면, 아랫면, 왼쪽면, 오른쪽면, 앞쪽면, 뒷쪽면)을 나눴다.

 

시계 방향으로 회전했을 때, 각각의 경우의 수를 생각해서 인덱스를 바꿔주는 방식으로 풀었다.

 

주의해야할 점은 두 가지가 있는데, 

1. 해당 면을 바라 봤을 때 기준으로 시계방향, 반시계 방향 회전이다.

2. 시계방향으로 3번 돌릴 경우 == 반시계 방향으로 1번 돌릴 경우이다. 따라서 시계방향만 구현하고 반시계 방향은 시계 방향을 3번 돌리면 된다.

3. 코드

python

def clockRotate(p):
    global cube
    origin_cube = [cube[i][:] for i in range(len(cube))]

    if p == 'U':
        lst = [6, 3, 0, 7, 4, 1, 8, 5, 2,
               42, 10, 11, 43, 13, 14, 44, 16, 17,
               18, 19, 20, 21, 22, 23, 24, 25, 26,
               27, 28, 45, 30, 31, 46, 33, 34, 47,
               36, 37, 38, 39, 40, 41, 35, 32, 29,
               15, 12, 9, 48, 49, 50, 51, 52, 53]
    elif p == 'D':
        lst = [0, 1, 2, 3, 4, 5, 6, 7, 8,
               9, 10, 53, 12, 13, 52, 15, 16, 51,
               24, 21, 18, 25, 22, 19, 26, 23, 20,
               38, 28, 29, 37, 31, 32, 36, 34, 35,
               11, 14, 17, 39, 40, 41, 42, 43, 44,
               45, 46, 47, 48, 49, 50, 27, 30, 33]
    elif p == 'F':
        lst = [0, 1, 2, 3, 4, 5, 33, 34, 35,
               9, 10, 11, 12, 13, 14, 6, 7, 8,
               18, 19, 20, 21, 22, 23, 15, 16, 17,
               27, 28, 29, 30, 31, 32, 24, 25, 26,
               36, 37, 38, 39, 40, 41, 42, 43, 44,
               51, 48, 45, 52, 49, 46, 53, 50, 47]
    elif p == 'B':
        lst = [9, 10, 11, 3, 4, 5, 6, 7, 8,
               18, 19, 20, 12, 13, 14, 15, 16, 17,
               27, 28, 29, 21, 22, 23, 24, 25, 26,
               0, 1, 2, 30, 31, 32, 33, 34, 35,
               42, 39, 36, 43, 40, 37, 44, 41, 38,
               45, 46, 47, 48, 49, 50, 51, 52, 53]
    elif p == 'L':
        lst = [36, 1, 2, 39, 4, 5, 42, 7, 8,
               9, 10, 11, 12, 13, 14, 15, 16, 17,
               18, 19, 51, 21, 22, 48, 24, 25, 45,
               33, 30, 27, 34, 31, 28, 35, 32, 29,
               26, 37, 38, 23, 40, 41, 20, 43, 44,
               0, 46, 47, 3, 49, 50, 6, 52, 53]
    elif p == 'R':
        lst = [0, 1, 47, 3, 4, 50, 6, 7, 53,
               15, 12, 9, 16, 13, 10, 17, 14, 11,
               44, 19, 20, 41, 22, 23, 38, 25, 26,
               27, 28, 29, 30, 31, 32, 33, 34, 35,
               36, 37, 2, 39, 40, 5, 42, 43, 8,
               45, 46, 24, 48, 49, 21, 51, 52, 18]

    for i in range(54):
        cube[i] = origin_cube[lst[i]]

T = int(input())
for _ in range(T):
    N = int(input())
    inputs = list(map(str, input().split()))

    cube = ['w']*9 + ['b']*9 + ['y']*9 + ['g']*9 + ['o']*9 + ['r']*9

    for i in range(N):
        if inputs[i][1] == '+':
            clockRotate(inputs[i][0])
        else:
            clockRotate(inputs[i][0])
            clockRotate(inputs[i][0])
            clockRotate(inputs[i][0])
    for i in range(3):
        print(*cube[i*3:i*3+3], sep="")

4. 마치며

직접 다 그리고 오타 잡느라 힘들었다 ^-^

'Algorithm > Python' 카테고리의 다른 글

[백준 17144] 미세먼지 안녕!  (0) 2021.04.20
[백준 16234] 인구 이동  (0) 2021.04.19
[백준 15683] 감시  (0) 2021.04.18
[백준 15685] 드래곤 커브  (0) 2021.04.18
[백준 14891] 톱니바퀴  (0) 2021.04.18