출처 : https://www.acmicpc.net/problem/14891
14891번: 톱니바퀴
총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴가 1번, 그 오른쪽은 2번, 그 오른쪽은 3번, 가장 오른쪽 톱니바퀴는 4번이다. 이때, 톱니바퀴를 총 K번 회전시키려고 한다. 톱니바퀴의 회전은 한 칸을 기준으로 한다. 회전은 시계 방향과 반시계 방향이 있고, 아래 그림과 같이 회전한다. 톱니바퀴를 회전시키려
www.acmicpc.net
In [1]:
from collections import deque
In [2]:
array_1 = deque(map(int, input())) ## 1번 톱니바퀴
array_2 = deque(map(int, input())) ## 2번 톱니바퀴
array_3 = deque(map(int, input())) ## 3번 톱니바퀴
array_4 = deque(map(int, input())) ## 4번 톱니바퀴
In [3]:
## K번 반복
for _ in range(int(input())):
## n번 톱니바퀴를 d방향으로 회전시려고 한다.
## d=1이면 시계방향이므로 rotate(1)을 하면 되고
## d=-1이면 반시계방향이므로 rotate(-1)을 하면 된다.
n, d = map(int, input().split())
d_array = deque([d])
## 1번 톱니바퀴를 회전시킨다.
if n==1:
## 1번 2번 톱니바퀴의 맞닿은 극이 서로 다르다.
if array_1[2] != array_2[6]:
d_array.append(-d)
## 2번 3번 극이 서로 다르다.
if array_2[2] != array_3[6]:
d_array.append(d)
## 3번 4번 극이 서로 다르다.
if array_3[2] != array_4[6]:
d_array.append(-d)
## 3번 4번 극이 서로 같다.
else:
d_array.append(0)
## 2번 3번 극이 서로 같다.
else:
d_array.append(0)
d_array.append(0)
## 1번 2번 톱니바퀴의 맞닿은 극이 서로 같다.
else:
d_array.append(0)
d_array.append(0)
d_array.append(0)
## 2번 톱니바퀴를 회전시킨다.
elif n==2:
## 1번 2번 극이 서로 다르다.
if array_1[2] != array_2[6]:
d_array.appendleft(-d)
## 1번 2번 극이 서로 같다.
else:
d_array.appendleft(0)
## 2번 3번 극이 서로 다르다.
if array_2[2] != array_3[6]:
d_array.append(-d)
## 3번 4번 극이 서로 다르다.
if array_3[2] != array_4[6]:
d_array.append(d)
## 3번 4번 극이 서로 같다.
else:
d_array.append(0)
## 2번 3번 극이 서로 같다.
else:
d_array.append(0)
d_array.append(0)
## 3번 톱니바퀴를 회전시킨다.
elif n==3:
## 2번 3번 극이 서로 다르다.
if array_2[2] != array_3[6]:
d_array.appendleft(-d)
## 1번 2번 극이 서로 다르다.
if array_1[2] != array_2[6]:
d_array.appendleft(d)
## 1번 2번 극이 서로 같다.
else:
d_array.appendleft(0)
## 2번 3번 극이 서로 같다.
else:
d_array.appendleft(0)
d_array.appendleft(0)
## 3번 4번 극이 서로 다르다.
if array_3[2] != array_4[6]:
d_array.append(-d)
## 3번 4번 극이 서로 같다.
else:
d_array.append(0)
## 4번 톱니바퀴를 회전시킨다.
else:
## 3번 4번 극이 서로 다르다.
if array_3[2] != array_4[6]:
d_array.appendleft(-d)
## 2번 3번 극이 서로 다르다.
if array_2[2] != array_3[6]:
d_array.appendleft(d)
## 1번 2번 극이 서로 다르다.
if array_1[2] != array_2[6]:
d_array.appendleft(-d)
## 1번 2번 극이 서로 같다.
else:
d_array.appendleft(0)
## 2번 3번 극이 서로 같다.
else:
d_array.appendleft(0)
d_array.appendleft(0)
## 3번 4번 극이 서로 같다.
else:
d_array.appendleft(0)
d_array.appendleft(0)
d_array.appendleft(0)
## 톱니바퀴를 각자의 방향으로 회전시켜라
array_1.rotate(d_array[0])
array_2.rotate(d_array[1])
array_3.rotate(d_array[2])
array_4.rotate(d_array[3])
In [4]:
## (S극 = 1로 표현되어 있다.)
## 1번 톱니바퀴의 12시방향이 S극이면 1점
## 2번 톱니바퀴의 12시방향이 S극이면 2점
## 3번 톱니바퀴의 12시방향이 S극이면 4점
## 4번 톱니바퀴의 12시방향이 S극이면 8점
return_sum = 0
if array_1[0] == 1:
return_sum = return_sum + 1
if array_2[0] == 1:
return_sum = return_sum + 2
if array_3[0] == 1:
return_sum = return_sum + 4
if array_4[0] == 1:
return_sum = return_sum + 8
In [5]:
print(return_sum)
'알고리즘 > [Python] 백준' 카테고리의 다른 글
(Python) 백준 15683번 : 감시 (0) | 2020.02.12 |
---|---|
(Python) 백준 14889번 : 스타트와 링크 (0) | 2020.02.12 |
(Python) 백준 5397번 : 키로거 (0) | 2020.02.06 |
(Python) 백준 1057번 : 토너먼트 (0) | 2020.02.06 |
(Python) 백준 1021번 : 회전하는 큐 (0) | 2020.02.06 |