알고리즘/백준
[Python] 백준 5397번 - 키로거
소꿍
2021. 7. 21. 14:18
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개 이상 활용할 수 있다는 것
세로가 아닌 가로로 볼 수 있다는 것