[백준] 14891 톱니바퀴

문제링크 : https://www.acmicpc.net/problem/14891

 

14891번: 톱니바퀴

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

www.acmicpc.net

 

from collections import deque

info = [deque(list(map(int, input()))) for _ in range(4)]
k = int(input())

def rotate(num, dis):
    visit[num] = True
    if 0 <= num-1:
        if not visit[num-1] and (info[num][6] != info[num-1][2]):
            rotate(num-1, -dis)
    if num+1 < 4:
        if not visit[num+1] and (info[num][2] != info[num+1][6]):
            rotate(num+1, -dis)
    info[num].rotate(dis)


for _ in range(k):
    num, dis = map(int, input().split())
    visit = [False for _ in range(4)]
    rotate(num-1, dis)

# 점수 계산
res = 0
for i in range(4):
    if info[i][0] == 1:
        res += 2**i

print(res)

 

해설 : deque의 rotate만 알면 간단한 문제이다. 

- visit체크를 하지않으면 recurssion error가 발생한다.

- 서로 붙어있는 톱니바퀴의 극성이 다를때만 rotate 함수를 재귀적으로 돌려주면된다.

- 같으면 톱니가 돌아가지 않기 때문에 그 이후는 고려할 필요가 없다.

'Algorithm > Python' 카테고리의 다른 글

[백준] 17142 연구소3  (1) 2024.03.07
[백준] 13549 숨바꼭질  (0) 2024.03.02
[백준] 3055 탈출  (0) 2024.02.03
[백준] 2467 용액  (0) 2023.10.24
[백준] 18428 감시피하기  (0) 2023.10.23