<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 제곱을 더한다.