[백준/python/15662] 톱니바퀴(2)

문제링크 : 톱니바퀴(2)

재밌는 구현문제이다. 그림그리면 문제를 이해하기 용이하다.

import sys
from collections import deque
input=sys.stdin.readline

T=int(input())
wheel=[deque(map(int, input().strip()))for _ in range(T)]

def move(n,d):
    global cur_right, cur_left, wheel
    origin_dir=d

    for i in reversed(range(n)): # 왼쪽의 톱니바퀴
        if wheel[i][2]!=cur_left:
            cur_left=wheel[i][6]
            wheel[i].rotate(d*-1)
            d*=-1
        else:
            break
    d=origin_dir
    for i in range(n+1,T): # 오른쪽의 톱니바퀴
        if wheel[i][6]!=cur_right:
            cur_right=wheel[i][2]
            wheel[i].rotate(d*-1)
            d*=-1
        else:
            break

K=int(input())
for _ in range(K):
    n,d=map(int, input().split())
    cur_left,cur_right=wheel[n-1][6],wheel[n-1][2]
    wheel[n-1].rotate(d)
    move(n-1,d)
print(sum([1 if wheel[0] else 0 for delta,wheel in enumerate(wheel)]))

deque의 rotate를 쓰는 것이 이 문제풀이의 핵심인 것 같다. 다른 언어에서도 가능한지 모르겠지만 python은 이런것이 편리하다.
회전시키는 톱니바퀴를 기준으로 왼쪽에 있는 톱니바퀴들과 오른쪽에 있는 톱니바퀴들을 나눠서 풀어줬다.

좋은 웹페이지 즐겨찾기