[Swift] 문자열 특정 문자 자르기 && 출력 개행,띄어쓰기 삭제 -BOJ 5430(AC-R(reverse) &D(delete) )

hye0n.gyu·2023년 5월 14일

Swift BOJ

목록 보기
5/15
post-thumbnail

⭐ 5430 - AC


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하여 뒷 문자를 지운다.
또한 문자열을 자르는 과정에서 아무 문자열이 없다면 런타임오류가 생기므로 그것을 예외처리 해주어야한다.




✔ 문자열 특정 문자 자르기(문자열 자르기 X)

1.양 끝 Char 제거 - trimmingCharacters 메소드 활용

arrStr = arrStr.trimmingCharacters(in: ["[","]"])

//ex
var helloStr = "[Hello]"
helloStr.trimmingCharacters(in: ["[","]"]) // Hello

2. 중간에 있는 특정한 Char 제거. - components

var str = "Dollar~$$$!!!D"

str.components(separatedBy: ["~","!","$"]).joined() //DollarD

그냥 components만 실행하면
[“Dollar”, ””, ””, ””, “”, “”, “”, “D”]
이렇게 문자열 배열로 나누어지기 때문에 joined를 해주어 문자열로 배열의 문자열들을 합쳐주어야한다.




✔ 출력 개행, 띄어쓰기 삭제

함수의 정의부

  • 첫 번째 매개변수, items
    우리가 흔히 전달하는 값들이 items이다.
    가변 매개변수로 호출하는 item 수가 많아도 상관없이 호출 가능하다.
    Items의 타입은 Any이기 때문에 우리가 아무 타입을 넣어도 출력해주는 것이다.


  • 두 번째 매개변수, separator
    separator의 타입은 String이고, 각 item 사이에 출력할 String을 지정할 수 있다. 기본값은 " " 이다.


  • 세 번째 매개변수, terminator
    terminator의 타입은 String이고, item 출력을 마친 이후에 덧붙일 String을 지정할 수 있다. 기본값은 "\n" (줄바꿈)이다.

separator와 terminator에 “ ”를 넣으면 개행과 item 사이의 띄어쓰기가 삭제된다.

profile
반려묘 하루 velog

0개의 댓글