본문 바로가기
알고리즘/백준

[Python] 백준 5397번 - 키로거

by 소꿍 2021. 7. 21.

https://www.acmicpc.net/problem/5397

 

5397번: 키로거

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L의 길이 ≤ 1,000,000) 강산이가 백스페이

www.acmicpc.net

 

Python

 

- 처음 코드

test_case = int(input())
result = []
for i in range(test_case):
    pw = list(input())
    left = []
    right = []
    for p in pw:
        if p == '-':
            if len(left) < 1:
                continue
            left.pop()
        elif p == '>':
            if len(right) < 1:
                continue
            left.append(right.pop())
        elif p == '<':
            if len(left) < 1:
                continue
            right.append(left.pop())
        else:
            left.append(p)
    result.append("".join(left))
for r in result:
    print(r)

 

- 해설 보고 수정한 코드

놓친 부분: right stack 합치기(reversed())

result 따로 저장하지 않고 바로 출력해도 된다는 것

test_case = int(input())
for i in range(test_case):
    pw = list(input())
    left = []
    right = []
    for p in pw:
        if p == '-':
            if left: # len 체크 부분을 수정
                left.pop()
        elif p == '>':
            if right:
                left.append(right.pop())
        elif p == '<':
            if left:
                right.append(left.pop())
        else:
            left.append(p)
    left.extend(reversed(right)) # right에 남아있을 문자열을 reversed() 후 합치기
    print(''.join(left)) # 바로 print 해도 됨

 

넓게 생각하기!!

stack을 2개 이상 활용할 수 있다는 것

세로가 아닌 가로로 볼 수 있다는 것

 

댓글