[백준] q15662 톱니바퀴 (2)
문제
T개의 톱니바퀴의 상태가 주어진다. N극은 0, S극은 1로 나타나있다. 그리고 주어진 회전 횟수 K만큼 회전시킨 톱니바퀴의 번호와 방향이 주어진다. 방향이 1인 경우는 시계 방향이고, -1인 경우는 반시계 방향이다.
톱니바퀴 A가 회전할 때, 그 옆에 있는 톱니바퀴 B와 맞닿는 톱니의 극이 다르다면, 톱니바퀴 A와 반대방향으로 톱니바퀴 B를 회전한다.
총 K번 회전시킨 이후에 12시 방향이 S극인 톱니바퀴의 개수를 출력하라.
어떻게 풀 것인가?
- T개의 톱니바퀴의 초기 상태와 톱니바퀴를 회전시킨 방법을 입력받는다.
- 톱니바퀴 A를 회전시켰을 때, 다른 톱니바퀴를 회전시키는 방향을 구한다.
- 톱니바퀴의 상태를 업데이트한다.
- 총 K번 회전시킨 이후 결과를 출력한다.
# T개의 톱니바퀴의 초기 상태를 입력받는다.
gears = []
t = int(input())
for _ in range(t):
gears.append(input())
# 톱니바퀴를 회전시킨 방법을 입력받는다.
k = int(input())
rotation_seq = []
for _ in range(k):
num, direc = map(int, input().split()) # 회전시킨 톱니바퀴의 번호, 방향(1: 시계 방향, -1: 반시계 방향)
rotation_seq.append([num - 1, direc])
# 톱니바퀴 A를 회전시켰을 때, 다른 톱니바퀴를 회전시키는 방향을 구한다.
for i in range(k):
state = [0] * t
state[rotation_seq[i][0]] = rotation_seq[i][1]
for j in range(rotation_seq[i][0], t - 1, 1):
if gears[j][2] != gears[j+1][6]:
state[j + 1] = -state[j]
for j in range(rotation_seq[i][0]-1, -1, -1):
if gears[j][2] != gears[j+1][6]:
state[j] = -state[j+1]
# 톱니바퀴의 상태를 업데이트한다.
for nu in range(t):
if state[nu] == 1:
gears[nu] = gears[nu][7] + gears[nu][0:7]
elif state[nu] == -1:
gears[nu] = gears[nu][1:8] + gears[nu][0]
else:
continue
# 톱니바퀴의 개수 계산
cnt = 0
for i in range(t):
if gears[i][0] == '1':
cnt += 1
# 결과 출력
print(cnt)
댓글남기기