

import Foundation
var n:Int = Int(readLine()!)!
for _ in 1...n {
var check:Bool = false
var commands:String = readLine()!
var size = Int(readLine()!)!
var arrStr = readLine()!
arrStr = arrStr.trimmingCharacters(in: ["[","]"])
var arr:[Int] = arrStr.split(separator: ",").map{Int($0)!}
var head = 0, tail = size - 1;
var isReversed = false
for command in commands {
if command=="R" {
isReversed.toggle()
}
else if command=="D" {
if head > tail {
print("error")
check = true
break
}
else {
if isReversed {tail -= 1}
else {head += 1}
}
}
}
if check {continue}
if(head==tail+1) {
print("[]")
continue
}
else {
if isReversed {arr = arr[head...tail].reversed().map{Int($0)}}
else { arr = arr[head...tail].map{Int($0)} }
}
print("[",separator: "", terminator: "")
if(!arr.isEmpty){
for num in 0...arr.count-1 {
if num==arr.count-1 {print(arr[num],separator: "",terminator: "")}
else {print(arr[num],",",separator: "",terminator: "")}
}
}
print("]")
}
구현 방식의 핵심은 문자열이 똑바로 되어있다면 head를 +1하여 앞문자를 지우고 거꾸로 되어있다면 tail을 -1하여 뒷 문자를 지운다.
또한 문자열을 자르는 과정에서 아무 문자열이 없다면 런타임오류가 생기므로 그것을 예외처리 해주어야한다.
arrStr = arrStr.trimmingCharacters(in: ["[","]"])
//ex
var helloStr = "[Hello]"
helloStr.trimmingCharacters(in: ["[","]"]) // Hello
var str = "Dollar~$$$!!!D"
str.components(separatedBy: ["~","!","$"]).joined() //DollarD
그냥 components만 실행하면
[“Dollar”, ””, ””, ””, “”, “”, “”, “D”]
이렇게 문자열 배열로 나누어지기 때문에 joined를 해주어 문자열로 배열의 문자열들을 합쳐주어야한다.
함수의 정의부
items separatorterminatorseparator와 terminator에
“ ”를 넣으면 개행과 item 사이의 띄어쓰기가 삭제된다.