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 |