import sys
from collections import deque
# 까다로웠던 점
# 회전은 전부 판별이 되고 난뒤에, 작동한다
gears =[ list(deque(map(deque,sys.stdin.readline().split()))) for _ in range(4)]
K = int(sys.stdin.readline())
# 12시 0, 3시 2, 9시 6
# N극은 0 S극은 1
for _ in range(K):
index,rotate = list(map(int,sys.stdin.readline().split()))
leftindex = index-1
leftrotate = -rotate
rightrotate = -rotate
rightindex = index+1
rotatelist = []
while leftindex >=1:
origingear = list(gears[leftindex][0])
leftgear = list(gears[leftindex-1][0])
if origingear[6] == leftgear[2]:
break
else:
rotatelist.append([leftindex-1,leftrotate])
leftrotate = -leftrotate
leftindex-=1
while rightindex <=4:
origingear = list(gears[rightindex-2][0])
rightgear = list(gears[rightindex-1][0])
if origingear[2] == rightgear[6]:
break
else:
rotatelist.append([rightindex-1,rightrotate])
rightrotate = -rightrotate
rightindex+=1
for rotateindex,rotation in rotatelist:
gears[rotateindex][0].rotate(rotation)
gears[index-1][0].rotate(rotate)
result = 0
for i in range(4):
tw = gears[i][0].popleft()
if tw == '1':
result += 2**i
print(result)
이 문제에서 까다로웠던 점은 한번 사이클이 다 돌고 난뒤에 회전을 한다는 것이다. 그 부분을 처음에 놓쳤기에 틀렸다.
deque 모듈에는 rotate라는 메소드가 있으며, 양수를 적으면, 양수만큼 오른쪽으로 이동하고, 음수를 적으면 음수의 크기만큼 왼쪽으로 이동하는 것을 이용하여, 반시계와 시계방향의 회전을 구현했다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] 16918 봄버맨(풀이 방식 2종류) (0) | 2021.01.10 |
---|---|
[BOJ] 16236 아기상어 (0) | 2021.01.10 |
[BOJ] 11654 아스키 코드 (0) | 2021.01.09 |
[BOJ] 10989 수 정렬하기3 (0) | 2021.01.09 |
[BOJ] 9498 시험성적 (0) | 2021.01.09 |