본문 바로가기
알고리즘/구현

[백준][Python] 14891번 톱니바퀴

by 임짠짠 2022. 11. 30.
반응형
 

14891번: 톱니바퀴

총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴

www.acmicpc.net

 

 

코드

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번을 비교한다.

인접한 톱니바퀴를 모두 확인한 후 마지막에 기준 톱니바퀴를 회전시켜준다.

반응형

댓글