2
<<BP<A>>Cd-
ThIsIsS3Cr3t
BAPC
ThIsIsS3Cr3t
배열 내에서 insert(newElement:, at:)를 이용해 풀이를 하려했으나 시간초과가 발생
-> 따라서 문자열 처리를 위한 스택 2개를 이용하기로 결정
스택 2개는 각각 키로그를 기록할 공간, "<", ">", "-"를 확인한 경우 해당 역할에 맞게 문자를 이동시키기 위한 예비 버퍼의 역할을 한다
a. 스택1에는 키로그를 기록한다
b. 만약 "<"를 확인한 경우 커서를 왼쪽으로 이동시키게 되므로 스택1의 키로그 중 마지막 문자를 스택 2로 이동시킨다
c. 만약 ">"를 확인한 경우 커서를 오른쪽으로 이동시키게 되므로 스택 2의 문자를 스택 1로 이동시킨다
d. 만약 "-"를 확인한 경우 키로그의 문자를 하나 없애고 커서를 왼쪽으로 하나 이동시킨다
스택2에 남아있는 문자가 있으면 전부 스택1로 옮기고 마지막에 joined()를 하여 출력한다
import Foundation
let input = Int(readLine()!)!
for _ in 0..<input {
let a = readLine()!
var stack1 = [String]()
var stack2 = [String]()
for i in a {
if i == "<", !stack1.isEmpty {
stack2.append(stack1.removeLast())
} else if i == ">", !stack2.isEmpty {
stack1.append(stack2.removeLast())
} else if i == "-", !stack1.isEmpty {
stack1.removeLast()
} else if i != "<" && i != ">" && i != "-" {
stack1.append(String(i))
}
}
while !stack2.isEmpty {
stack1.append(stack2.removeLast())
}
print(stack1.joined())
}