티스토리 뷰

알고리즘/BOJ

[BOJ-14891] 톱니바퀴

개발하는 후딘 2020. 3. 24. 23:33
728x90
반응형

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

 

14891번: 톱니바퀴

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

www.acmicpc.net


[풀이]

 

 

 


[코드-Python]

import sys
from copy import deepcopy
input=sys.stdin.readline

#입력#
cogs=[]
cogs_clockwise=[0]*4 #초기화 
for _ in range(4):
    cogs.append([*map(int,input().strip())])

K=int(input())

#톱니 K번 회전#
for _ in range(K):
    target, clockwise= map(int, input().strip().split())
    cogs_clockwise[target-1]=clockwise

    #(1) target의 왼쪽부터확인
    #now가 0번이면 (1번톱니) 더이상 왼쪽은 존재하지 않는다.
    for now in range(target-1, 0, -1):
        #현재톱니는 회전중인가?
        if abs(cogs_clockwise[now])==1:
            #현재톱니의 6번째값과, 왼쪽톱니의 2번째값이 같은가?-> 왼쪽톱니 정지
            if cogs[now][6]==cogs[now-1][2]:
                cogs_clockwise[now-1]=0

            #다르다면-> 왼쪽톱니는 현재 톱니의 반대방향으로 회전
            else:
                cogs_clockwise[now-1]=(-1)*cogs_clockwise[now]

        #현재 톱니가 회전하지 않으면, 왼쪽톱니도 회전하지 않는다.
        else:
            cogs_clockwise[now-1]=0

    #(2) target의 오른쪽확인
    #now가 3번이면 더이상 오른쪽은 존재하지 않는다.
    for now in range(target-1, 3):
        #현재 톱니는 회전중인가?
        if abs(cogs_clockwise[now])==1:
            #현재톱니의 2번째값과 오른쪽톱니의 6번째 값이 같은가?->오른쪽 톱니 정지
            if cogs[now][2]==cogs[now+1][6]:
                cogs_clockwise[now+1]=0
            else:
                cogs_clockwise[now+1]=(-1)*cogs_clockwise[now]
        else:
            cogs_clockwise[now+1]=0
        
    #(3) 톱니회전
    for i in range(4):
        if cogs_clockwise[i]==1: #시계방향
            tmp=deepcopy(cogs[i])
            cogs[i]=tmp[-1:]+tmp[:-1]
            
        elif cogs_clockwise[i]==-1:#반시계방향
            tmp=deepcopy(cogs[i])
            cogs[i]=tmp[1:]+[tmp[0]]
    
#K번회전후 톱니상태 결과
result=0
for i in range(4):
    #12시방향의 cogs[i][0]이 1이라면 => 2**i만큼 더한다.
    if cogs[i][0]==1:
        result+=2**i

print(result)

 

728x90
반응형

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ-16936] 나3곱2  (0) 2020.03.26
[BOJ-1946] 신입사원  (0) 2020.03.25
[BOJ-14500] 테트로미노  (0) 2020.03.21
[BOJ-14499] 주사위 굴리기  (0) 2020.03.21
[BOJ-16234] 인구이동  (0) 2020.03.18
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함