이 문제는 시뮬레이션 문제이다.
톱니바퀴의 초기상태와 회전 방법이 주어졌을 때, 최종 톱니바퀴의 상태를 구해야한다.
나는 이 문제를 보자마자 나는 비트마스크를 써야겠다고 생각했다.
톱니의 상태를 2진수로 만들고, 이를 시계방향, 반시계방향으로 회전시키는 함수를 만들었다. (10~25번째 줄)
12시 방향의 비트를 MSB로 두었고, MSB 바로 왼쪽의 비트를 LSB로 두었다.

10101111 -> 01011111
각 명령마다 톱니바퀴를 선택하고 돌릴 때, solution 함수를 통해 톱니바퀴를 양쪽으로 탐색한다.
비트마스크를 사용해서 문제를 풀 때, 여기서 주의해야할 점이 있다.
1. 오른쪽으로 탐색할 때
오른쪽 톱니바퀴를 회전시킬지 결정할 때, 오른쪽 톱니바퀴의 2번째 비트와, 왼쪽 톱니바퀴의 6번째 비트를 비교한다. 만약 비트가 다르다면 왼쪽 톱니바퀴의 반대방향으로 회전시킨다.
2. 왼쪽으로 탐색할 때
왼쪽 톱니바퀴를 회전시킬지 결정할 때, 왼쪽 톱니바퀴의 6번째 비트와, 오른쪽 톱니바퀴의 2번째 비트를 비교한다. 만약 비트가 다르다면 오른쪽 톱니바퀴의 반대반향으로 회전시킨다.
32~40번째 줄을 보면, 톱니바퀴의 탐색 방향과 비트 일치유무에 따라 flag를 지정하고, 이를 재귀적으로 처리한다.