![article thumbnail image](https://blog.kakaocdn.net/dn/cjOc8g/btq9XbsdesW/a52QEVa6L4Kwkia5tbSV4k/img.png)
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의 모든 항목을 넣는다.
'Algorithm' 카테고리의 다른 글
백준 알고리즘 파이썬(Python) 11279번 최대 힙 (0) | 2021.07.28 |
---|---|
백준 알고리즘 파이썬(Python) 9012번 괄호 (0) | 2021.07.22 |
백준 알고리즘 파이썬(Python) 1449번 수리공 항승 (0) | 2021.07.06 |
백준 알고리즘 파이썬(Python) 16162번 가희와 3단 고음 (0) | 2021.06.12 |
백준 알고리즘 파이썬(Python) 13413번 오셀로 재배치 (0) | 2021.06.08 |