[ BOJ / Python ] 14891번 톱니바퀴

황승환·2022년 3월 17일
0

Python

목록 보기
252/498


이번 문제는 deque의 rotate 함수를 사용하여 해결하였다. rotate(1)의 경우 해당 문자열은 [1:]+[0]과 같은 형태가 되고, rotate(-1)의 경우 해당 문자열은 [-1]+[:-1]과 같은 형태가 된다. 돌아간 톱니바퀴의 오른쪽에 위치하는 모든 톱니바퀴를 회전시키는 함수와 왼쪽에 위치하는 모든 톱니바퀴를 회전시키는 함수를 각각 재귀함수로 작성하여 해결하였다.

Code

from collections import deque
import sys
input=sys.stdin.readline
wheel={}
for i in range(1, 5):
    wheel[i]=deque(list(map(int, list(str(input().replace('\n', ''))))))
n=int(input())
cycle=[]
def right(cur, type):
    if cur>4 or wheel[cur-1][2]==wheel[cur][6]:
        return
    if wheel[cur-1][2]!=wheel[cur][6]:
        right(cur+1, -type)
        wheel[cur].rotate(type)
def left(cur, type):
    if cur<1 or wheel[cur][2]==wheel[cur+1][6]:
        return
    if wheel[cur+1][6]!=wheel[cur][2]:
        left(cur-1, -type)
        wheel[cur].rotate(type)
for i in range(n):
    cycle.append(list(map(int, input().split())))
    right(cycle[-1][0]+1, -cycle[-1][1])
    left(cycle[-1][0]-1, -cycle[-1][1])
    wheel[cycle[-1][0]].rotate(cycle[-1][1])
answer=0
for i in range(1, 5):
    answer+=(2**(i-1))*(wheel[i][0])
print(answer)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글