동캄의 코딩도장

백준 14981 [톱니바퀴] 파이썬 본문

코테/BOJ

백준 14981 [톱니바퀴] 파이썬

동 캄 2022. 5. 19. 13:27

https://www.acmicpc.net/problem/14891

 

14891번: 톱니바퀴

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

www.acmicpc.net

 

# 백준 14891 톱니바퀴
from collections import deque
import sys
input = sys.stdin.readline
one = deque(list(map(int, input().rstrip())))
two = deque(list(map(int, input().rstrip())))
three = deque(list(map(int, input().rstrip())))
four = deque(list(map(int, input().rstrip())))
match = {1: one, 2: two, 3: three, 4: four}
K = int(input())


def turn_clock(s):
    s.appendleft(s.pop())


def return_clock(s):
    s.append(s.popleft())


def check(num):
    right = num+1
    left = num-1
    if 1 <= left < 5 and match[num][6] != match[left][2] and visited[left] == 0:
        nums.appendleft(left)
        visited[left] = 1
        check(left)
    if 1 <= right < 5 and match[num][2] != match[right][6] and visited[right] == 0:
        nums.append(right)
        visited[right] = 1
        check(right)


for _ in range(K):
    num, direc = map(int, input().split())
    nums = deque([])
    visited = [0]*(5)
    nums.append(num)
    visited[num] = 1
    check(num)
    ind = nums.index(num)
    if ind % 2 == 1:
        if direc == 1:
            direc = -1
        else:
            direc = 1
    for num in nums:
        if direc == 1:
            turn_clock(match[num])
            direc = -1
        else:
            return_clock(match[num])
            direc = 1

answer = 0
wei = 1
for val in match.values():
    answer += val[0]*wei
    wei *= 2
print(answer)

회전하게될 톱니들의 값들을 nums에 저장한다. (왼쪽 톱니는 appendleft로, 오른쪽 톱니는 append로 처리)

그 후에, 회전한다.

'코테 > BOJ' 카테고리의 다른 글

백준 11758 [CCW] 파이썬  (0) 2022.05.20
백준 2589 [보물섬] 파이썬  (0) 2022.05.20
백준 2225 [합분해] 파이썬  (0) 2022.05.19
백준 1011 [Fly me to the Alpha Centauri] 파이썬  (0) 2022.05.19
백준 9663 [N-Queen] 파이썬  (0) 2022.05.18