문제 링크

<aside> 💡 구현/시뮬레이션

</aside>

Memory 113112KB Time 116ms Code Length 929B

gears = []

def turn(ind, dir):
    gear = gears[ind]
    if dir == 1:
        gears[ind] = [gear[-1]] + gear[:-1]
    else:
        gears[ind] = gear[1:] + [gear[0]]

def update(ind, dir):
    directions = [0] * 4
    directions[ind] = dir

    for i in range(ind, 3):
        if gears[i][2] != gears[i + 1][6]:
            directions[i + 1] = -directions[i]
        else:
            break

    for i in range(ind, 0, -1):
        if gears[i][6] != gears[i - 1][2]:
            directions[i - 1] = -directions[i]
        else:
            break

    for i in range(4):
        if directions[i] != 0:
            turn(i, directions[i])

for _ in range(4):
    gear = list(map(int, input().strip()))
    gears.append(gear)

K = int(input())

for _ in range(K):
    ind, dir = map(int, input().split())
    update(ind - 1, dir)

score = 0
for i in range(len(gears)):
    if gears[i][0] == 1:
        score += 2 ** i
print(score)

이 코드는 톱니바퀴 게임의 시뮬레이션을 수행한다.

먼저, 빈 리스트 gears를 생성한다. 이 리스트에는 각각의 톱니바퀴의 상태를 나타내는 리스트가 추가된다.

turn 함수는 톱니바퀴를 회전시키는 역할을 한다. 톱니바퀴의 회전 방향은 매개변수 dir에 의해 결정된다. dir이 1이면 시계 방향으로, -1이면 반시계 방향으로 회전한다.

update 함수는 톱니바퀴의 회전 상태를 업데이트한다. 이 함수는 톱니바퀴의 인덱스와 회전 방향을 매개변수로 받는다. 이 함수는 먼저 회전 방향을 저장하는 리스트 directions를 초기화한다. 그 다음, 선택된 톱니바퀴에서 오른쪽과 왼쪽으로 톱니바퀴를 검사하며, 인접한 톱니바퀴의 극이 다르면 회전 방향을 반대로 설정한다.

그 다음, 각 톱니바퀴에 대해 회전 방향이 0이 아니면 turn 함수를 호출하여 톱니바퀴를 회전시킨다.

톱니바퀴의 상태를 입력받고, 회전 횟수 K를 입력받는다. 각 회전에 대해 톱니바퀴의 인덱스와 회전 방향을 입력받아 update 함수를 호출한다.

마지막으로, 각 톱니바퀴의 상태를 검사하여 점수를 계산하고 출력한다. 톱니바퀴의 12시 방향이 1이면 점수에 2의 i 제곱을 더한다.