Baekjoon 5397.py [키로거]

hohooodo·2021년 7월 6일
0

Problem Solving

목록 보기
19/32
post-thumbnail

문제가 궁금하다면?

첫번째 풀이(메모리 초과)

from collections import deque
import sys
input = sys.stdin.readline

for _ in range(int(input())):
    arr = deque(list(input()))
    location = 0
    result = [deque([]) for _ in range(len(arr))]
    while arr:
        now = arr.popleft()
        if now == '<':
            if not location == 0:
                location -= 1
        elif now == '>':
            location += 1
        elif now == '-':
            del result[location-1]
        else:
            result[location].appendleft(now)
            location += 1

    for i in result:
        for j in i:
            print(j, end='')

두번째 풀이(통과)

from collections import deque
import sys
input = sys.stdin.readline

for _ in range(int(input().rstrip())):
    originalPwd = list(input().rstrip())
    left, right = [], deque([])
    for alphabet in originalPwd:
        if alphabet == '<':
            if left:
                right.appendleft(left.pop())
        elif alphabet == '>':
            if right:
                left.append(right.popleft())
        elif alphabet == '-':
            if left:
                left.pop()
        else:
            left.append(alphabet)
    left.extend(right)
    print(''.join(left))

풀이 복기

첫번째 방법으로 풀었을때는 리스트가 너무 많이 만들어져 메모리초과가 뜸. 조금 고쳐서 제출하려했으나 아이디어가 생각나지않아 다른 풀이를 참고함.
result = arr1 + arr2 보다 arr1.extend(arr2)를 사용하여 리스트를 합치는게 효율적이다. extend로 리스트를 묶으면 메모리상 원래 리스트 뒤에 추가된다.

profile
글을 잘쓰는 개발자가 되고싶습니다

0개의 댓글