명령어 | 내용 |
---|---|
L | 커서를 왼쪽으로 한 칸 옮김 (커서가 문장의 맨 앞이면 무시됨) |
D | 커서를 오른쪽으로 한 칸 옮김 (커서가 문장의 맨 뒤이면 무시됨) |
B | 커서 왼쪽에 있는 문자를 삭제함 (커서가 문장의 맨 앞이면 무시됨) |
P $ | $라는 문자를 커서 왼쪽에 추가함 |
Q. cursor라는 커서의 위치를 나타내는 변수가 필요할 것인데, 커서가 맨 앞과 뒤가 아닌 가운데에 있다면 그 자리에 어떻게 문자를 추가할 것인가?
str형식은 추가가 안되고, 리스트 형식에서는 앞 뒤만 삽입 삭제가 가능한데 가운데는 어떻게 해결할 것인가??
커서 변수를 두고 인덱스를 움직이는 것이 아니라 스택 두개를 사용해서 마치 커서가 왼쪽으로 혹은 오른쪽으로 움직인 것 처럼 만든다.
- 입력받은 문자열을 리스트화 하여 이를 하나의 스택으로 본다. => word
- 커서를 왼쪽으로 옮기기 => word에서 pop해서 tmp라는 새로운 스택에 넣는다.
- 커서를 오른쪽으로 옮기기 => tmp에서 pop해서 다시 word에 붙인다.
- 마지막에, word와 tmp에서 원소를 pop하여 차례로 붙인 문자열이 정답이다.
word = list(sys.stdin.readline().strip()) #문자열 입력받는 동시에 리스트로 만들기
n = int(sys.stdin.readline().strip())
tmp = []
for _ in range(n):
command = sys.stdin.readline().strip()
if command[0] == 'P':
word.append(command[2])
elif command[0] == 'L':
if word:
tmp.append(word.pop())
elif command[0] == 'D':
if tmp:
word.append(tmp.pop())
elif command[0] == 'B':
if word:
word.pop()
print(''.join(word) + ''.join(tmp)[::-1])
readline()
은 개행문자(줄 바꿈 문자)를 포함하고 있다. 그래서 문자열 마지막에 개행문자가 포함되어 출력되기 때문에 이러한 공백 없이 출력할 수 있도록 strip()
사용