Algorithm & DataStructure
[Backjoon] 톱니바퀴
GeonWoo Kim
2020. 12. 10. 09:46
14891번 톱니바퀴는 구현 및 시뮬레이션 문제로 좋은 연습이 된 문제다. 4개의 기어들이 회전방향에 따라서 옆에 붙어있는 기어들도 회전시킨다. 그런데 서로 맞물린 극성이 다르다면 회전시킬 수 없고, 회전시킬 수 없는 기어에 맞물린 기어들도 회전시킬 수 없다. 문제를 읽어가면서 부담감이 컸는데 천천히 구현해가면 충분히 풀이할 수 있는 문제였다. 구현과 시뮬레이션 관련한 문제를 좀 더 연습을 많이 해야겠다.
import sys
from collections import deque
if __name__ == "__main__":
gears = []
for _ in range(4):
gears.append(deque(list(map(int, list(sys.stdin.readline().replace("\n", ""))))))
rotates = []
rotate_count = int(sys.stdin.readline())
for _ in range(rotate_count):
rotates.append(list(map(int, sys.stdin.readline().split(" "))))
for number_gear, direction in rotates:
have_to_ratate = [0, 0, 0, 0]
idx_gear = number_gear - 1
have_to_ratate[idx_gear] = direction
# 정방향 기어들의 회전방향을 결정한다.
temp_direction = direction
idx_last_gear, idx_near_gear = idx_gear, idx_gear
while idx_near_gear < 3:
idx_near_gear += 1
temp_direction *= -1
if gears[idx_last_gear][2] != gears[idx_near_gear][6]:
have_to_ratate[idx_near_gear] = temp_direction
else:
break
idx_last_gear = idx_near_gear
# 역방향 기어들의 회전방향을 결정한다.
temp_direction = direction
idx_last_gear, idx_near_gear = idx_gear, idx_gear
while idx_near_gear > 0:
idx_near_gear -= 1
temp_direction *= -1
if gears[idx_last_gear][6] != gears[idx_near_gear][2]:
have_to_ratate[idx_near_gear] = temp_direction
else:
break
idx_last_gear = idx_near_gear
# 기어들을 회전시킨다.
for idx, direct in enumerate(have_to_ratate):
gears[idx].rotate(direct)
answer = 0
for idx, gear in enumerate(gears):
answer += (2**idx) * gear[0]
print(answer)