백준 14891 톱니바퀴 -python
문제
- 시뮬레이션 문제
문제풀이
- 시계방향, 반시계 방향으로 돌리기
- 기준 톱니바퀴가 회전하면 옆 톱니바퀴는 기준 톱니바퀴의 반대방향으로 회전해야 한다
- 옆 톱니바퀴가 회전하면 이와 맞물려 있는 톱니바퀴는 또 반대방향으로 회전한다
보완
check
부분을 조금 더 효과적으로,rotate
부분을 더 효과적으로 짜는 방법을 연구해봐야 겠다..
code
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
# 시계방향, 반시계방향으로 돌리기
def rotate(state):
for n, i in enumerate(state):
if(i == 1):
gear[n][0], gear[n][1], gear[n][2], gear[n][3], gear[n][4], gear[n][5], gear[n][6], gear[n][7] = gear[n][7], gear[n][0], gear[n][1], gear[n][2], gear[n][3], gear[n][4], gear[n][5], gear[n][6]
elif(i == -1):
gear[n][0], gear[n][1], gear[n][2], gear[n][3], gear[n][4], gear[n][5], gear[n][6], gear[n][7] = gear[n][1], gear[n][2], gear[n][3], gear[n][4], gear[n][5], gear[n][6], gear[n][7], gear[n][0]
# for n, i in enumerate(state):
# if(i == 1):
# tail = gear[n].pop(7)
# gear[n].insert(0, tail)
# elif(i == -1):
# head = gear[n].pop(0)
# gear[n].insert(7, head)
# 톱니바퀴 체크
## 각 톱니바퀴 번호별로 서로 맞물려 있기 때문에 이를 고려해서 방향 체크를 해줘야 함
def check(n, d, state):
if(n == 1):
state[0] = d
d = -d
if(gear[0][2] != gear[1][6]):
state[1] = d
d = -d
if(gear[1][2] != gear[2][6]):
state[2] = d
d = -d
if(gear[2][2] != gear[3][6]):
state[3] = d
elif(n == 2):
state[1] = d
t = -d
if(gear[0][2] != gear[1][6]):
state[0] = t
if(gear[1][2] != gear[2][6]):
state[2] = t
t = -t
if(gear[2][2] != gear[3][6]):
state[3] = t
elif(n == 3):
state[2] = d
t = -d
if(gear[1][2] != gear[2][6]):
state[1] = -d
t = -t
if(gear[0][2] != gear[1][6]):
state[0] = t
if(gear[2][2] != gear[3][6]):
state[3] = -d
elif(n == 4):
state[3] = d
t = -d
if(gear[2][2] != gear[3][6]):
state[2] = t
t = -t
if(gear[1][2] != gear[2][6]):
state[1] = t
t = -t
if(gear[0][2] != gear[1][6]):
state[0] = t
gear = [list(map(int, input())) for _ in range(4)]
k = int(input())
# 몇번재 톱니바퀴가 어느 방향으로 돌아야 할지를 저장해 주기위한 리스트
state = [0,0,0,0]
for _ in range(k):
n, d = map(int, input().split())
check(n, d, state)
rotate(state)
state = [0,0,0,0]
print(gear[0][0]*1 + gear[1][0]*2 + gear[2][0]*4 + gear[3][0]*8)