https://www.acmicpc.net/problem/16939
5373. 큐빙을 풀기전에 미리 풀어보면 좋은 문제이다.
여기서 pitch, yaw, roll 은 3차원 축에 대한 회전방향을 나타내는 용어이다.
또한 큐브의 경우 한방향으로 3번 회전하는 것은 곳 1번 반대방향으로 회전한 것과 같다.
따라서 코드는 다음과 같다. ccw는 반시계방향, cw는 시계방향이다.
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
def pitch_ccw(size=2):
tmp1, tmp2 = cube[22], cube[22 + size]
cube[22], cube[22 + size] = cube[9], cube[9 + size]
cube[9], cube[9 + size] = cube[5], cube[5 + size]
cube[5], cube[5 + size] = cube[1], cube[1 + size]
cube[1], cube[1 + size] = tmp1, tmp2
def roll_ccw(size=2):
tmp1, tmp2 = cube[17], cube[17 + size]
cube[17], cube[17 + size] = cube[10], cube[9]
cube[10], cube[9] = cube[16], cube[16-size]
cube[16], cube[16 - size] = cube[3], cube[4]
cube[3], cube[4] = tmp1, tmp2
def yaw_ccw(size=2):
tmp = cube[21:21 + size]
cube[21:21 + size] = cube[17:17 + size]
cube[17:17 + size] = cube[5:5 + size]
cube[5:5 + size] = cube[13:13 + size]
cube[13:13 + size] = tmp
def pitch_cw(size=2):
for _ in range(3):
pitch_ccw(size)
def roll_cw(size=2):
for _ in range(3):
roll_ccw(size)
def yaw_cw(size=2):
for _ in range(3):
yaw_ccw(size)
def check_all_surface():
for i in range(6):
for j in range(1, 4):
if cube[4 * i + j] != cube[4 * i + (j + 1)]:
return False
return True
CUBE = [0] + list(map(int, input().split()))
answer = 0
if not answer: # pitch 반시계방향
cube = CUBE[:]
pitch_ccw(2)
if check_all_surface():
answer = 1
if not answer: # pitch 시계방향
cube = CUBE[:]
pitch_cw(2)
if check_all_surface():
answer = 1
if not answer: # roll 반시계방향
cube = CUBE[:]
roll_ccw(2)
if check_all_surface():
answer = 1
if not answer: # roll 시계방향
cube = CUBE[:]
roll_cw(2)
if check_all_surface():
answer = 1
if not answer: # yaw 반시계방향
cube = CUBE[:]
yaw_ccw(2)
if check_all_surface():
answer = 1
if not answer: # yaw 시계방향
cube = CUBE[:]
yaw_cw(2)
if check_all_surface():
answer = 1
print(answer)
|
cs |
728x90
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[Python]16918. 봄버맨 (0) | 2019.04.11 |
---|---|
[Python]5373. 큐빙 (0) | 2019.04.11 |
[Python]16235. 나무 재테크 (0) | 2019.04.10 |
[Python]16236. 아기 상어 (0) | 2019.04.09 |
[Python]6064. 카잉 달력 (0) | 2019.04.09 |
댓글