boraBong

[Swift] StrSymmetryPoint 문제 풀이 [Codility - Exercise 4. Algorithmic Skills] 본문

iOS/Algorithm

[Swift] StrSymmetryPoint 문제 풀이 [Codility - Exercise 4. Algorithmic Skills]

보라봉_ 2023. 3. 30. 20:29
728x90

💬 문제

https://app.codility.com/programmers/trainings/4/str_symmetry_point/

 

StrSymmetryPoint coding task - Practice Coding - Codility

Find a symmetry point of a string, if any.

app.codility.com

 


💬 Idea

  • 해당 문자의 왼쪽에 있는 문자열 부분이 오른쪽에 있는 문자열 부분과 반전이 되도록 하는 인덱스가 있다면 해당 인덱스를 도출하는 문제였다.
    • 따라서 문자열의 길이가 짝수이면 위 조건에 해당하지 않기 때문에 바로 -1을 리턴한다.
    • 문자열의 길이가 홀수일 때에는 중간 인덱스를 기점으로 왼쪽 오른쪽의 끝 문자들부터 비교해보면 된다.
      • 즉 “racecar”와 같은 문자열이 있을 때 중간을 기점으로 양 끝의 문자들을 차례로 비교한다.
      • 비교하며 같지 않은 인덱스가 있다면 바로 -1을 리턴하며 빠져나오고, 반복문을 다 돌때까지 같다면 mid(중간 인덱스)를 리턴한다.

💬 풀이

public func solution(_ S : inout String) -> Int {
    if S.count % 2 == 0 { return -1 }
    
    let mid = S.count / 2
    var start = 0
    var end = S.count - 1
    let s = Array(S).map({ String($0) })
    
    while start < mid {
        if s[start] != s[end] {
            return -1
        }
        
        start += 1
        end -= 1
    }
    
    return mid
}

시간복잡도: O(length(S))

 

효율성 0점 풀이 : https://app.codility.com/demo/results/trainingDY7DPQ-PFH/

100점 풀이 : https://app.codility.com/demo/results/trainingZNRGGS-24G/

 

 

<깃헙>

https://github.com/hwangJi-dev/swiftAlgorithm/blob/main/Programmers/Codility/Exercise/SrtSymmetryPoint.swift

 

GitHub - hwangJi-dev/swiftAlgorithm: Algorithm Practice with Swift

Algorithm Practice with Swift. Contribute to hwangJi-dev/swiftAlgorithm development by creating an account on GitHub.

github.com

 

 

 

반응형
Comments