두 개의 스택을 사용하여, 커서의 이동에 따라 원소를 왼쪽이나 오른쪽으로 옮겨주면 되는 문제이다.
예를들어, abc 가 있을 때 "L"명령어를 받는다면
커서가 왼쪽으로 이동해야하기 때문에 ab|c 와 같이 되고
이를 스택으로 표현한다면 왼쪽 스택에 a,b 오른쪽 스택에 c가 들어가야한다.
이를 popLast( 스택의 마지막 원소를 제거하고, 해당 원소를 반환함) 과 append(해당 스택의 제일 마지막에 원소 추가함)를 사용하여 구현하였다.
import Foundation
var letters = readLine()!
let testCase = Int(readLine()!)!
var rightLetters = [Characters]()
for _ in 0..<testCase {
let line = readLine()!.split(separator: " ")
if line[0] == "P" {
letters.append(contentsOf: line[1])
} else if line[0] == "L" {
if letters.isEmpty == false {
rightLetters.insert(letters.popLast()!, at: 0)
}
} else if line[0] == "D" {
if rightLetters.isEmpty == false {
letters.append(rightLetters.popLast()!)
}
} else if line[0] == "B" {
if letters.isEmpty == false {
letters.removeLast()
}
}
}
rightLetters.reversed()
letters.forEach {
print($0,terminator: "")
}
rightLetters.forEach {
print($0, terminator: "")
}
import Foundation
var letters = readLine()!
let testCase = Int(readLine()!)!
var rightLetters = ""
for _ in 0..<testCase {
let line = readLine()!
if line == "L" {
if !letters.isEmpty {
rightLetters.append(letters.popLast()!)
}
} else if line == "D" {
if !rightLetters.isEmpty {
letters.append(rightLetters.popLast()!)
}
} else if line == "B" {
if !letters.isEmpty {
letters.removeLast()
}
} else {
letters.append(line.last!)
}
}
print(letters + rightLetters.reversed())