728x90


커서의 위치를 0으로 두고 입력값에 따라 커서의 위치를 변경시켜 가는 생각을 가장 먼저 했다. 하지만 전체 테스트 케이스가 1,000,000개로 매우 큰 편이므로 이럴 경우 시간 초과가 날 확률이 크다

 

생각을 바꿔서 커서를 움직이는 것이 아닌 커서를 놓고 양쪽 문자열을 옮긴다고 생각하면 쉽다.

커서를 중간에 놓고 Left 리스트와 Right 리스트를 pop을 이용해 뺀 값을 서로에게 주고 받으면서 문제를 풀어나가면 된다.

 

n = int(input())

for i in range(n):
    left = []
    right = []
    case = input()
    for j in range(len(case)):
        if case[j] == '-':
            if left: # left리스트에 값이 있을 경우만 실행
                left.pop()
        elif case[j] == '<':
            if left: # left리스트에 값이 있을 경우만 실행
                right.append(left.pop())
        elif case[j] == '>':
            if right:# right리스트에 값이 있을 경우만 실행
                left.append(right.pop())
        else:
            left.append(case[j])
    left.extend(reversed(right)) #append와 extend 차이 알아두기 , 오른쪽 리스트는 append를 통해 리스트 가장 마지막에 
                                 #원소가 추가됐을것 이므로 reverse를 통해 뒤집어 붙여준다.
    print(''.join(left)) # join함수에 대해 알아보기

 


참고

 

append vs extend

 

list.append(x)는 리스트 끝에 x 1개를 그대로 넣는다.

list.extend(iterable)는 리스트 끝에 가장 바깥쪽 iterable의 모든 항목을 넣는다.

 

append는 x 그 자체를 원소로 넣고 extend는 iterable의 각 항목들을 넣는 것을 확인

 

복사했습니다!