회문 문자열 검사(Swift)

2022. 10. 5. 17:36Algorithm

회문 문자열 검사(Swift)

 

 

 문제 설명

 

 

 

 문자열을 Array로 변환한 풀이

 

func checkRotate(_ arr: [Character]) -> String {
  for i in 0..<arr.count/2 {
    if arr[i] != arr[arr.count-i-1] {
      return "NO"
    }
  }
  return "YES"
}

let n = Int(readLine()!)!
var results: [String] = []

for _ in 0..<n {
  let input = Array(readLine()!.lowercased())
  results.append(checkRotate(input))
}

for (idx, x) in results.enumerated() {
  print("\(idx+1) \(x)")
}

 

 

 문자열 인덱스 개념을 이용한 풀이

 

문자열 인덱스를 이용해서 문제를 풀 때 느낀점은 String.Index(utf16Offset:in:)을 사용하면 인자들이 헷갈리고 조금 덜 직관적이라고 느꼈다. (utf16Offset은 기존의 encodedOffset이 deprecate되고 나온 것) 

 

그래서 이제 문제를 풀 때 일관적으로 문자열.index(값, offsetBy:)를 사용해서 인덱스를 구해서 subString해서 풀어나가야겠다.

 

func checkRotate(_ str: String) -> String {
  for i in 0..<str.count/2 {
    let firstIndex = str.index(str.startIndex, offsetBy: i)
    let lastIndex = str.index(str.endIndex, offsetBy: -(i+1))
    if str[firstIndex] != str[lastIndex] {
      return "NO"
    }
  }
  return "YES"
}

let n = Int(readLine()!)!
var results: [String] = []

for _ in 0..<n {
  let input = readLine()!.lowercased()
  results.append(checkRotate(input))
}

for (idx, x) in results.enumerated() {
  print("\(idx+1) \(x)")
}

 

 피드백

 

문자열을 String.Index타입으로 하나의 값만 추출하면 Character가, SubString으로 범위를 정해서 추출하면 SubString타입이 나온다.

 

 

 

 

 

'Algorithm' 카테고리의 다른 글

숫자만 추출  (0) 2022.10.07
백준 - 회문(Swift)  (0) 2022.10.06
완주하지 못한 선수 - 프로그래머스(python3)  (0) 2022.10.03
백준 - 주사위게임 2476번 (Swift)  (0) 2022.10.03
대표값  (2) 2022.10.01