상세 컨텐츠

본문 제목

파이썬을 풀어보는 백준 5373번: 큐빙 (삼성 A형 기출 문제)

Python/문제풀이 (삼성 A형 대비)

by 코딩하는 낙타 2020. 3. 29. 21:09

본문

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

 

5373번: 큐빙

문제 루빅스 큐브는 삼차원 퍼즐이다. 보통 루빅스 큐브는 3×3×3개의 작은 정육면체로 이루어져 있다. 퍼즐을 풀려면 각 면에 있는 아홉 개의 작은 정육면체의 색이 동일해야 한다. 큐브는 각 면을 양방향으로 90도 만큼 돌릴 수 있도록 만들어져 있다. 회전이 마친 이후에는, 다른 면을 돌릴 수 있다. 이렇게 큐브의 서로 다른 면을 돌리다 보면, 색을 섞을 수 있다. 이 문제에서는 루빅스 큐브가 모두 풀린 상태에서 시작한다. 윗 면은 흰색, 아랫 면은 노란

www.acmicpc.net

 

 

내 풀이:

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
def rotate(c):
    T, X, Y, Z, W = U, L, F, R, B
    if c == 'L':
        T, X, Y, Z, W = L, F, U, B, D
    if c == 'F':
        T, X, Y, Z, W = F, U, L, D, R
    if c == 'R':
        T, X, Y, Z, W = R, D, B, U, F
    if c == 'B':
        T, X, Y, Z, W = B, R, D, L, U
    if c == 'D':
        T, X, Y, Z, W = D, B, R, F, L
 
    T[0][2], T[1][2], T[2][2], T[2][1], T[2][0], T[1][0], T[0][0], T[0][1= T[0][0], T[0][1], T[0][2], T[1][2], \
                                                                             T[2][2], T[2][1], T[2][0], T[1][0]
 
    X[2][2], X[2][1], X[2][0], Y[2][0], Y[1][0], Y[0][0], Z[0][2], Z[1][2], Z[2][2], W[0][0], W[0][1], W[0][2= \
        Y[2][0], Y[1][0], Y[0][0], Z[0][2], Z[1][2], Z[2][2], W[0][0], W[0][1], W[0][2], X[2][2], X[2][1], X[2][0]
 
 
for _ in range(int(input())):
    U = [['w'* 3 for _ in range(3)]
    D = [['y'* 3 for _ in range(3)]
    F = [['r'* 3 for _ in range(3)]
    B = [['o'* 3 for _ in range(3)]
    L = [['g'* 3 for _ in range(3)]
    R = [['b'* 3 for _ in range(3)]
    n = int(input())
    data = list(input().split())
    for area, dir in data:
        rotate(area)
        if dir == '-':
            rotate(area)
            rotate(area)
    for i in range(3):
        print("".join(j for j in U[i]))
 

Python3, 272ms

이 문제를 짧은 코드로 작성해서 풀기 위해서는 큐브의 겨냥도를 그릴 때 우리가 보기 편한 방식이 아닌 모든 면이 순환하는 형태로 두고 코드를 짜야 한다.

관련글 더보기

댓글 영역