본문 바로가기

코딩테스트/파이썬

백준 12891번 톱니바퀴

728x90

문제 설명

 

signal 배열은 wheel1~4까지 각각의 바퀴마다 어느 방향으로 회전해야하는지에 대한 데이터가 담긴 배열이다. 0이면 그대로, 1이면 시계 방향, -1이면 반시계 방향이다. 처음에 func 함수에서 회전시키는 방법에 맞게 signal의 값들을 설정한다.

 

 

위에서 signal에 입력한 데이터를 사용하여 spin 함수를 실행한다. dir(방향)이 0일 경우 그대로 함수를 종료하고 1일 경우 마지막 톱니의 극을 빼서 맨 앞에 넣어주고 -1일 경우 맨 앞의 톱니의 극을 빼서 맨 뒤에 넣어준다.

 

 

전체 코드

wheel1 =[]
wheel2 =[]
wheel3 = []
wheel4 = []
signal = []

def spin(num,dir):
    global wheel1
    global wheel2
    global wheel3
    global wheel4

    if dir == 0:
        return

    if num == 1:
        if dir == 1:
            tmp = wheel1.pop()
            wheel1.insert(0,tmp)
        else:
            tmp = wheel1.pop(0)
            wheel1.append(tmp)
    elif num == 2:
        if dir == 1:
            tmp = wheel2.pop()
            wheel2.insert(0,tmp)
        else:
            tmp = wheel2.pop(0)
            wheel2.append(tmp)
    elif num == 3:
        if dir == 1:
            tmp = wheel3.pop()
            wheel3.insert(0,tmp)
        else:
            tmp = wheel3.pop(0)
            wheel3.append(tmp)
    elif num == 4:
        if dir == 1:
            tmp = wheel4.pop()
            wheel4.insert(0,tmp)
        else:
            tmp = wheel4.pop(0)
            wheel4.append(tmp)

def func(num,dir):
    global wheel1
    global wheel2
    global wheel3
    global wheel4
    global signal

    signal = [0] * 5

    if num == 1:
        signal[1] = dir
        if wheel1[2] != wheel2[6]:
            if dir == 1:
                signal[2] = -1
            else:
                signal[2] = 1
            if wheel2[2] != wheel3[6]:
                if signal[2] == 1:
                    signal[3] = -1
                else:
                    signal[3] = 1
                if wheel3[2] != wheel4[6]:
                    if signal[3] == 1:
                        signal[4] = -1
                    else:
                        signal[4] = 1
    elif num == 2:
        signal[2] = dir
        if wheel2[6] != wheel1[2]:
            if dir == 1:
                signal[1] = -1
            else:
                signal[1] = 1
        if wheel2[2] != wheel3[6]:
            if dir == 1:
                signal[3] = -1
            else:
                signal[3] = 1
            if wheel3[2] != wheel4[6]:
                if signal[3] == 1:
                    signal[4] = -1
                else:
                    signal[4] = 1
    elif num == 3:
        signal[3] = dir
        if wheel3[6] != wheel2[2]:
            if dir == 1:
                signal[2] = -1
            else:
                signal[2] = 1
            if wheel2[6] != wheel1[2]:
                if signal[2] == 1:
                    signal[1] = -1
                else:
                    signal[1] = 1
        if wheel3[2] != wheel4[6]:
            if dir == 1:
                signal[4] = -1
            else:
                signal[4] = 1
    else:
        signal[4] = dir
        if wheel4[6] != wheel3[2]:
            if dir == 1:
                signal[3] = -1
            else:
                signal[3] = 1
            if wheel3[6] != wheel2[2]:
                if signal[3] == 1:
                    signal[2] = -1
                else:
                    signal[2] = 1
                if wheel2[6] != wheel1[2]:
                    if signal[2] == 1:
                        signal[1] = -1
                    else:
                        signal[1] = 1
    return


def main():
    global wheel1
    global wheel2
    global wheel3
    global wheel4
    global signal

    wheel1 = list(map(int,input()))
    wheel2 = list(map(int,input()))
    wheel3 = list(map(int,input()))
    wheel4 = list(map(int,input()))
    K = int(input())
    answer = 0
    for i in range(K):
        n,m = map(int,input().split())
        func(n,m)
        for s in range(1,5):
            spin(s,signal[s])

    if wheel1[0]:
        answer += 1
    if wheel2[0]:
        answer += 2
    if wheel3[0]:
        answer += 4
    if wheel4[0]:
        answer += 8
    print(answer)
    return

if __name__ == "__main__":
    main()
728x90
반응형

'코딩테스트 > 파이썬' 카테고리의 다른 글

[백준] 14503번 로봇 청소기  (0) 2021.02.17
백준 3190번 뱀  (0) 2021.02.11
백준 11559번 Puyo Puyo  (0) 2021.02.09
백준 18808번 스티커 붙이기  (0) 2021.02.09
백준 12100번 2048(Easy)  (0) 2021.02.07