크크루쿠쿠

백준 14891 톱니바퀴 Python 3 본문

알고리즘

백준 14891 톱니바퀴 Python 3

JH_KIM 2020. 11. 26. 19:05

꽤나 전에 풀었던 문제같은데 갑자기 기억이 난 문제라 남겨본다.

코드를 조금 더 간결하게 할수 있을거 같은데 아직 능력이 조금 부족한것 같다.

 

def rotate(array, n): #돌리는 함수
    return array[-n:]+array[:-n]


def gear_turn(gears,numbers): #어느 톱니가 돌지 먼저 체크후에 한번에 돌림

    for i in numbers:
        turn=[0,0,0,0] #돌아야 하는지 여부
        clock=[0,0,0,0]#돌 방향
        k=i[0]-1
        l=i[1]

        turn[k]=1 
        clock[k]=l #입력받은 돌릴꺼
        while k<3: #오른쪽 톱니들 회전 체크
            if gears[k][2]!=gears[k+1][6]:
                k+=1
                l*=-1 #방향 바꿔주고 톱니 설정
                turn[k]=1
                clock[k]=l
            else:
                break

        k=i[0]-1 #k,l 초기화
        l=i[1]
        while k>0 : #왼쪽 톱니들 회전 체크
            if gears[k][6]!=gears[k-1][2]:
                k-=1
                l*=-1
                turn[k]=1
                clock[k]=l
            else:
                break
        
        for i,t in enumerate(turn): #돌리기 #아마 여기가 문제?
            if t==1:
                gears[i]=rotate(gears[i],clock[i])


    return print(sum([gear[0]*(2**i)for i,gear in enumerate(gears)])) #답 출력

# 메인함수
gears=[list(map(int,list(input())))for _ in range(4)] #톱니 입력

len=int(input()) #몇번?

num = [list(map(int, input().split(' '))) for _ in range(len)] # 회전 입력

gear_turn(gears,num)

 

Comments