본문 바로가기
Xcode/Swift - Algorithm

Swift) LeetCode(Easy) - Valid Palindrome II (String)

by 후르륵짭짭 2020. 8. 27.
728x90
반응형

leetcode.com/problems/valid-palindrome-ii/

 

Valid Palindrome II - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

안녕하세요 후르륵짭짭 입니다.

쉬운 문제인데,,,,, 알고리즘에 약하기 때문에,,, 쩝,,,,

생각 보다 많이 고민한 문제 였습니다,,,

코드 짜는것도 쉽지 않았고,,,, 실력이 늘었으면 하는 바람 입니다 ㅎㅎㅎ

 

** 문제 **

문제는 간단합니다. 최대 한개 까지 문자를 지울 수 있으며, 문자가 펠린드롬인지 확인 하는 문제 입니다

 

** 해설 **

class Solution {
    
    func validPalindrome(_ s: String) -> Bool {

        
        let arrayS = Array(s).map { (char) -> String in
            return String(char)
        }
        
        let end = arrayS.count - 1
        
        for index in 0...end/2{
            
            if arrayS[index] != arrayS[end - index] {
                    
                if !isPalindrome(arrayS, index + 1, end - index) && !isPalindrome(arrayS, index,end - index - 1){
                    return false
                }
                else{
                    return true
                }
                
            }
            
        }
        
        
        return true
    }
    
    func isPalindrome(_ array : [String],_ start : Int, _ end : Int) -> Bool {
        
        var startIndex = start
        var endIndex = end
        
        while startIndex <= endIndex {
            
            if array[startIndex] != array[endIndex] {
                return false
            }
            
            startIndex += 1
            endIndex -= 1
            
        }
        
        return true
    }
    
}

저의 코드는 이렇습니다...

통과는 하였지만 과연 이 코드가 좋은 코드 일지는 의문이 듭니다.

 

거의 이 문제 가지고 한시간 반 이나 걸려서 푼 문제 같습니다... (제발 ㅠㅠㅠ 짭잡아 실력 좀 늘자 )

처음에 팰린드롬인지 확인하면서 절반까지 갑니다.

그러다가 절반 까지 도달했는데, 문제가 없다면 그냥 이 문자는 팰린드롬이지만

중간에 오류가 있다면 거기서 부터 다시 팰린드롬인지 확인을 합니다.

 

여기서 참 많은 시간을 쓴 것 같습니다.....

    func isPalindrome(_ array : [String],_ start : Int, _ end : Int) -> Bool {
        
        var startIndex = start
        var endIndex = end
        
        while startIndex <= endIndex {
            
            if array[startIndex] != array[endIndex] {
                return false
            }
            
            startIndex += 1
            endIndex -= 1
            
        }
        
        return true
    }

단순히 팰린드롬인지 확인하는 코드 인데,,,,

저는 mid 값 부터,, 별의 별짓을 다했습니다.... 참,,,,

그냥 start 에서는 하나씩 증가시켜주고 end에서는 하나식 줄여주면 되는데,,,,

 

예를들어 aaaaa caba aaaaa 이렇게 주어졌다 할때,

caba 지점에서 양쪽이 달라진 것을 알 수 있습니다.

따라서 aba 와 cab를 둘다 확인하고 둘다 false이면 이것은 나중에 또 오류가 있음을 의미해서

결과를 false를 반환하게 되고 만약 둘중에 하나라도 true라면

이것은 최대 하나를 지웠더라도 팰린드롬이 가능하기 때문에 true를 최종 결과값으로 반환해줍니다.

 

Easy 였기만,,,, 그래도 실력 향상이 됐음을 기도하고 ㅠㅠ

728x90
반응형

댓글