(삼성) - 톱니바퀴(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-톱니바퀴
Author And Source
이 문제에 관하여((삼성) - 톱니바퀴(14891)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@skkfea07/백준삼성-톱니바퀴14891저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)