728x90
https://www.acmicpc.net/problem/14891
결국 중요한건 1~4번째까지의 수레를 돌리느냐 안돌리냐를 결정해주면 된다.
그래서 0으로 구성된 visited배열을 [0,0,0,0] 으로 잡은 후에 한 프로세스를 거치고 [0,0,1,-1]와 같은 배열을 얻을 수 있다면 단순히 이 배열을 순회하면서 회전만 시키면 된다고 생각했다.
즉, 회전과 검사를동시에 하지말고 2단계에 나눠서 한다고 생각하면 된다.
여러 방법이 있겠지만 회전을 시작하는 톱니바퀴에서 재귀함수를 이용해서 퍼져나가면서 검사를 하도록 했다.
import sys
from collections import deque
input = sys.stdin.readline
gear = [0]+[ deque([ int(x) for x in input().strip() ]) for _ in range(4)]
k = int(input())
orders = [ list(map(int,input().split())) for _ in range(k)]
def rotate(num,order):
if order:
if order == 1:
gear[num].appendleft(gear[num].pop())
else:
gear[num].append(gear[num].popleft())
def process(order):
num,odr = order
visited[num] = odr
if 1<=num-1<5 and not visited[num-1] and gear[num-1][2] != gear[num][6]:
process([num-1,odr*(-1)])
if 1<=num+1<5 and not visited[num+1] and gear[num+1][6] != gear[num][2]:
process([num+1,odr*(-1)])
for order in orders:
visited = [0] * 5
process(order)
for i in range(1,5):
rotate(i,visited[i])
result = 0
for i in range(1,5):
if gear[i][0]:
result += 2**(i-1)
print(result)
728x90
'Python > 백준' 카테고리의 다른 글
15684_사다리조작 (0) | 2022.07.02 |
---|---|
15683_감시 (0) | 2022.06.30 |
14890_경사로 (0) | 2022.06.27 |
14503_로봇청소기 (0) | 2022.06.27 |
14502_연구소 (0) | 2022.06.26 |