알고리즘/[Python] 백준

(Python) 백준 14891번 : 톱니바퀴

 

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

 

14891번: 톱니바퀴

총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴가 1번, 그 오른쪽은 2번, 그 오른쪽은 3번, 가장 오른쪽 톱니바퀴는 4번이다. 이때, 톱니바퀴를 총 K번 회전시키려고 한다. 톱니바퀴의 회전은 한 칸을 기준으로 한다. 회전은 시계 방향과 반시계 방향이 있고, 아래 그림과 같이 회전한다. 톱니바퀴를 회전시키려

www.acmicpc.net


 

(Python) 백준 14891번 톱니바퀴

(Python) 백준 14891번 : 톱니바퀴

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

  • 알고리즘 분류
    • 시뮬레이션

In [1]:
from collections import deque
In [2]:
array_1 = deque(map(int, input())) ## 1번 톱니바퀴
array_2 = deque(map(int, input())) ## 2번 톱니바퀴
array_3 = deque(map(int, input())) ## 3번 톱니바퀴
array_4 = deque(map(int, input())) ## 4번 톱니바퀴
10010011
01010011
11100011
01010101
In [3]:
## K번 반복
for _ in range(int(input())):
    ## n번 톱니바퀴를 d방향으로 회전시려고 한다.
    ## d=1이면 시계방향이므로 rotate(1)을 하면 되고
    ## d=-1이면 반시계방향이므로 rotate(-1)을 하면 된다.
    n, d = map(int, input().split())   
    d_array = deque([d])
    
    ## 1번 톱니바퀴를 회전시킨다.
    if n==1:
        ## 1번 2번 톱니바퀴의 맞닿은 극이 서로 다르다.
        if array_1[2] != array_2[6]:
            d_array.append(-d)
            ## 2번 3번 극이 서로 다르다.
            if array_2[2] != array_3[6]:
                d_array.append(d)
                ## 3번 4번 극이 서로 다르다.
                if array_3[2] != array_4[6]:
                    d_array.append(-d)
                ## 3번 4번 극이 서로 같다.
                else:
                    d_array.append(0)
            ## 2번 3번 극이 서로 같다.
            else:
                d_array.append(0)
                d_array.append(0)
        ## 1번 2번 톱니바퀴의 맞닿은 극이 서로 같다.
        else:
            d_array.append(0)
            d_array.append(0)
            d_array.append(0)
    ## 2번 톱니바퀴를 회전시킨다.
    elif n==2:
        ## 1번 2번 극이 서로 다르다.
        if array_1[2] != array_2[6]:
            d_array.appendleft(-d)
        ## 1번 2번 극이 서로 같다.
        else:
            d_array.appendleft(0)
        ## 2번 3번 극이 서로 다르다.
        if array_2[2] != array_3[6]:
            d_array.append(-d)
            ## 3번 4번 극이 서로 다르다.
            if array_3[2] != array_4[6]:
                d_array.append(d)
            ## 3번 4번 극이 서로 같다.
            else:
                d_array.append(0)
        ## 2번 3번 극이 서로 같다.
        else:
            d_array.append(0)
            d_array.append(0)
    ## 3번 톱니바퀴를 회전시킨다.
    elif n==3:
        ## 2번 3번 극이 서로 다르다.
        if array_2[2] != array_3[6]:
            d_array.appendleft(-d)
            ## 1번 2번 극이 서로 다르다.
            if array_1[2] != array_2[6]:
                d_array.appendleft(d)
            ## 1번 2번 극이 서로 같다.
            else:
                d_array.appendleft(0)
        ## 2번 3번 극이 서로 같다.
        else:
            d_array.appendleft(0)
            d_array.appendleft(0)
        ## 3번 4번 극이 서로 다르다.
        if array_3[2] != array_4[6]:
            d_array.append(-d)
        ## 3번 4번 극이 서로 같다.
        else:
            d_array.append(0)
    ## 4번 톱니바퀴를 회전시킨다.
    else:
        ## 3번 4번 극이 서로 다르다.
        if array_3[2] != array_4[6]:
            d_array.appendleft(-d)
            ## 2번 3번 극이 서로 다르다.
            if array_2[2] != array_3[6]:
                d_array.appendleft(d)
                ## 1번 2번 극이 서로 다르다.
                if array_1[2] != array_2[6]:
                    d_array.appendleft(-d)
                ## 1번 2번 극이 서로 같다.
                else:
                    d_array.appendleft(0)
            ## 2번 3번 극이 서로 같다.
            else:
                d_array.appendleft(0)
                d_array.appendleft(0)
        ## 3번 4번 극이 서로 같다.
        else:
            d_array.appendleft(0)
            d_array.appendleft(0)
            d_array.appendleft(0)
    
    ## 톱니바퀴를 각자의 방향으로 회전시켜라
    array_1.rotate(d_array[0])
    array_2.rotate(d_array[1])
    array_3.rotate(d_array[2])
    array_4.rotate(d_array[3])
8
1 1
2 1
3 1
4 1
1 -1
2 -1
3 -1
4 -1
In [4]:
## (S극 = 1로 표현되어 있다.)
## 1번 톱니바퀴의 12시방향이 S극이면 1점
## 2번 톱니바퀴의 12시방향이 S극이면 2점
## 3번 톱니바퀴의 12시방향이 S극이면 4점
## 4번 톱니바퀴의 12시방향이 S극이면 8점

return_sum = 0
if array_1[0] == 1:
    return_sum = return_sum + 1
if array_2[0] == 1:
    return_sum = return_sum + 2
if array_3[0] == 1:
    return_sum = return_sum + 4
if array_4[0] == 1:
    return_sum = return_sum + 8
In [5]:
print(return_sum)
5