이번 문제는 단어가 원래 자리로 돌아오는 주기를 찾아 반복 횟수를 줄이는 방식으로 해결하였다. 처음에는 입력의 범위를 확인하지 않고, 단순하게 for문을 돌며 주어진 연산의 반대 연산을 실행하도록 구현하였다. 정답은 잘 나왔지만, 시간초과가 났다. 입력의 범위를 확인한 후, 주기를 찾아야겠다고 생각하였고, 중복 확인을 매 반복마다 하며 중복이 발생할 경우, 그때까지의 횟수를 주기로 간주하고, x를 주기로 나눈 나머지로 갱신하였다. 그리고 x만큼 반복하며 반대 연산을 실행하였다.
x = int(input())
after = list(str(input()))
tmp = after[:]
def blinking():
before = ['' for _ in range(len(after))]
left = 0
right = len(after) - 1
for i in range(len(after)):
if i % 2 == 0:
before[left] = after[i]
left += 1
else:
before[right] = after[i]
right -= 1
return before
visited = [tuple(after)]
for _ in range(x):
after = blinking()
if tuple(after) not in set(visited):
visited.append(tuple(after))
else:
break
x %= len(visited)
after = tmp[:]
for _ in range(x):
after = blinking()
print(''.join(after))