본문 바로가기

algorithm/exercise

[BOJ 14891] 백준 14891 톱니바퀴

문제

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

 

14891번: 톱니바퀴

첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터

www.acmicpc.net

 

풀이

 

 

python3


def checkLeft(gearNum, dir, gearList):
    if gearNum <= 0 or gearList[gearNum][6] == gearList[gearNum - 1][2]:
        return

    checkLeft(gearNum - 1, -dir, gearList)
    gearList[gearNum-1] = rotate(gearList[gearNum-1], dir)


def checkRight(gearNum, dir, gearList):
    if gearNum >= 3 or gearList[gearNum][2] == gearList[gearNum + 1][6]:
        return

    checkRight(gearNum + 1, -dir, gearList)
    gearList[gearNum+1] = rotate(gearList[gearNum+1], dir)


def rotate(r_list, dir):
    return r_list[-dir:] + r_list[:-dir]


if __name__ == "__main__":
    gearList = list()
    for i in range(4):
        row = list(map(str, input().split()))
        gearList.append(list(row[0]))

    n = int(input())
    for i in range(n):
        gearNum, dir = map(int, input().split())
        checkLeft(gearNum - 1, -dir, gearList)
        checkRight(gearNum - 1, -dir, gearList)
        gearList[gearNum - 1] = rotate(gearList[gearNum - 1], dir)

    result = 0
    for i in range(4):
        result += (2**i) * int(gearList[i][0])
    print(result)

 

아쉬웠던점

처음 gearList 인서트 받는 부분에서, int 로 받으면 00000010의 경우 10만 인서트되는 이슈가 있었다.

GearNum은 1,2,3,4 이지만, GearList의 인덱스는 0부터 시작하는 부분을 간과해서 어려웠다.

rotate 부분을 구현하는 방법에 대해서 생각했다...