1. 문제
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 |