백준 14891 톱니바퀴

wook2·2021년 7월 22일
0

알고리즘

목록 보기
39/117

구현 + 재귀에 관한 내용이 있는 문제

어떤 바퀴를 돌릴때 왼쪽, 오른쪽을 확인해야 하는데,
바퀴를 돌려놓고 나서 왼쪽 오른쪽을 돌리려면 이미 틀어진 바퀴로 확인을 해야하기 때문에 정확하지 않다.
그러므로 재귀를 통해 제일 왼쪽과 오른쪽을 찾고 바퀴를 돌려나가는 방식으로 진행하였다.
돌리는 방식은 deque 라이브러리의 rotate 함수를 이용하였다.

from collections import deque
blade = {}
for i in range(1,5):
    blade[i] = deque((list(map(int,input()))))
k = int(input())
rotation = []
for i in range(k):
    rotation.append(list(map(int,input().split())))

def dfs_left(start,direction):
    if start < 1 or blade[start+1][6] == blade[start][2]:
        return
    if blade[start+1][6] != blade[start][2]:
        dfs_left(start-1, -direction)
        blade[start].rotate(direction)

def dfs_right(start,direction):
    if start > 4 or blade[start-1][2] == blade[start][6]:
        return
    if blade[start-1][2] != blade[start][6]:
        dfs_right(start+1, -direction)
        blade[start].rotate(direction)

for rotate in rotation:
    x, direction = rotate
    dfs_left(x-1,-direction)
    dfs_right(x+1,-direction)
    blade[x].rotate(direction)

answer = 0
for i in range(1,5):
    if blade[i][0] == 1:
        answer += 2**(i-1)

print(answer)
profile
꾸준히 공부하자

0개의 댓글