(サムスン)-ギア(14891)
https://www.acmicpc.net/problem/14891
import sys
from collections import deque
def checkRight(start, dirs):
if (start > 4) or gears[start - 1][2] == gears[start]:
return
if gears[start - 1][2] != gears[start][6]:
checkRight(start + 1, -dirs)
gears[start].rotate(dirs)
def checkLeft(start, dirs):
if start < 1 or gears[start][2] == gears[start + 1][6]:
return # 가장 왼쪽 톱니 바퀴이거나 오른쪽 톱니바퀴와 맞닿는 부분의 극이 같을 때
if gears[start + 1][6] != gears[start][2]:
checkLeft(start - 1, -dirs) # 왼쪽 톱니 체크할 때 현 톱니의 반대 방향으로 회전
gears[start].rotate(dirs) # 넘겨 받은 dirs로 rotate 메서드 회전한다.
gears = {}
for i in range(1, 5): # 4개 톱니바퀴 상태
gears[i] = deque(list(map(int, list(sys.stdin.readline().replace("\n", "")))))
# gears[i] = deque([1, 0, 1, 0, 1, 1, 1, 1]), gears[i + 1] = ...
# gears = {i : deque([1, 0, 1, 0, 1, 1, 1, 1]), ...}
n = int(sys.stdin.readline())
for i in range(n):
num, dirs = map(int, sys.stdin.readline().split())
checkRight(num + 1, -dirs)
checkLeft(num - 1, -dirs)
gears[num].rotate(dirs)
result = 0
for i in range(4):
result += (2 ** i) * gears[i + 1][0]
# 인덱스 0번째가 12시 방향
# 인덱스 커질수록 1, 2, 4, 8처럼 2배 지수
print(result)
rotateメソッドの使用参照)
キューなし直接回転:https://pacific-ocean.tistory.com/369
キュー自体による回転:https://inspirit941.tistory.com/entry/Python-白準-14891-歯車
Reference
この問題について((サムスン)-ギア(14891)), 我々は、より多くの情報をここで見つけました https://velog.io/@skkfea07/백준삼성-톱니바퀴14891テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol