[백준 5397] 키로거 (Python)

hhkim·2022년 8월 24일
0

algorithm - python

목록 보기
2/10
post-thumbnail

이것도 바킹독 연결 리스트 강의 보고 나서 풀긴 했는데 이전 방식으로 푸니까 자꾸 시간 초과가 났다.
어떻게 해도 안 되길래 구글링을 해보니까 파이썬 풀이는 다들 스택 방식이어서 이번 기회에 나도 그렇게 풀어봤다.

왼쪽, 오른쪽 배열을 만들고 각각 커서의 왼쪽과 오른쪽 문자열로 한다. 주의할 점은 스택 방식으로 저장되기 때문에 오른쪽 배열은 거꾸로 출력해야 한다는 거!

🦾 배운 점

  • 시간 초과 때문에 방법을 찾다가 혹시나 해서 출력도 빠른 출력으로 바꿔보았다.
    (물론 이걸로도 해결 안 되긴 했지만...)
    ❗️ 줄바꿈이 포함되어 있지 않아서 줄바꿈 문자(\n)를 명시적으로 작성해야 한다.
  • join()은 두 문자열을 연결하는 게 아니라 인자로 전달된 배열의 각 요소를 앞의 문자열을 연결자로 해서 하나의 문자열로 만들어준다.
a = ['a', 'b', 'c']
''.join(a)		# abc
' * '.join(a)	# a * b * c
  • reverse()가 아니라 reversed()는 처음 봤다.
    reverse()는 기존 리스트를 거꾸로 뒤집어주고,
    reversed()는 reversed 객체를 반환한다고 한다. (참고)
    👉 문자열로 만들려면 ''.join()을 사용!
import sys

input = sys.stdin.readline
print = sys.stdout.write

n = int(input())
for i in range(n) :
	left = []
	right = []
	pwd = input().strip()
	for c in pwd :
		if c == '<' :
			if left :
				right.append(left.pop())
		elif c == '>' :
			if right :
				left.append(right.pop())
		elif c == '-' :
			if left :
				left.pop()
		else :
			left.append(c)
	print(''.join(left) + ''.join(reversed(right)) + '\n')

0개의 댓글