반응형
코드
from collections import deque
def left(n,dir):
if n >= 0 and ns[n][2] != ns[n+1][6]:
left(n-1,-dir)
ns[n].rotate(dir)
def right(n,dir):
if n <= 3 and ns[n][6] != ns[n-1][2]:
right(n+1,-dir)
ns[n].rotate(dir)
ns = [deque(input()) for _ in range(4)]
k = int(input())
for _ in range(k):
num,dir = map(int,input().split())
num -= 1
left(num-1,-dir)
right(num+1,-dir)
ns[num].rotate(dir)
ans = 0
for i in range(4):
if ns[i][0] == '1':
ans += 2**i
print(ans)
설명
처음에 deque의 popleft, pop을 사용해서 회전을 시키려고 했는데 찾아보니까 deque에 rotate라는 기능도 있었다.
rotate(1) 을 하면 제일 뒤에 있던 것이 제일 앞으로 이동 (오른쪽으로 이동)
rotate(-1) 을 하면 제일 앞에 있던 것이 제일 뒤로 이동 (왼쪽으로 이동)
먼저 회전시킬 톱니바퀴와 인접한 톱니바퀴를 회전할 수 있는지 확인을 한다. 만약 3번이 회전시킬 톱니바퀴일 경우 먼저 왼쪽에 있는 2번 톱니바퀴의 인덱스 2번과 3번 톱니바퀴의 인덱스 6번을 비교한다. 만약 같으면 2번은 회전시킬 수 없으므로 1번 톱니바퀴는 확인할 필요가 없다. 다음으로 오른쪽에 있는 4번 톱니바퀴의 인덱스 6번과 3번 톱니바퀴의 인덱스 2번을 비교한다.
인접한 톱니바퀴를 모두 확인한 후 마지막에 기준 톱니바퀴를 회전시켜준다.
반응형
'알고리즘 > 구현' 카테고리의 다른 글
[백준][Python] 1913번 달팽이 (0) | 2023.02.24 |
---|---|
[프로그래머스][Python] n^2배열 자르기 (0) | 2023.02.23 |
[백준][Python] 1475번 방 번호 (0) | 2022.11.18 |
[백준][Python] 21918번 전구 (0) | 2022.06.21 |
[백준][Python] 14467번 소가 길을 건너간 이유 1 (0) | 2022.06.21 |
댓글