[ BOJ / Python ] 9519번 졸려

황승환·2022년 6월 22일
0

Python

목록 보기
333/498


이번 문제는 단어가 원래 자리로 돌아오는 주기를 찾아 반복 횟수를 줄이는 방식으로 해결하였다. 처음에는 입력의 범위를 확인하지 않고, 단순하게 for문을 돌며 주어진 연산의 반대 연산을 실행하도록 구현하였다. 정답은 잘 나왔지만, 시간초과가 났다. 입력의 범위를 확인한 후, 주기를 찾아야겠다고 생각하였고, 중복 확인을 매 반복마다 하며 중복이 발생할 경우, 그때까지의 횟수를 주기로 간주하고, x를 주기로 나눈 나머지로 갱신하였다. 그리고 x만큼 반복하며 반대 연산을 실행하였다.

Code

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))

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글