ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 9. 스택을 이용한 회문(palindrome) 검사, 파이썬
    Python/파이썬 자료구조 알고리듬 2019. 6. 4. 01:26
    반응형

    앞으로 읽으나 뒤로 읽으나 같은 단어, 구절, 숫자 등을
    회문(palindrome)이라고 합니다. 

     

    스택은 '(깔끔하게 정돈하여) 쌓은 무더기'라는 뜻입니다.  
    (아래) 먼저 쌓은 것부터 꺼낼 수 없고
    (가장 위) 마지막 쌓은 것부터 꺼낼 수 있습니다.

     

    파이썬에서는 list의 append 메소드가 push와 같고
    list에는 pop 메소드도 있으니 
    list를 바로 쓰시면 됩니다. 

     

    스택을 이용해서 넣었다 빼면서 원문과 같은 지 확인하면 됩니다. 

    def is_palindrome(word):
        s = []
        for i in range(len(word)):
            s.append(word[i])
        for i in range(len(word)):
            if s.pop() != word[i]:
                return False
        return True
    
    
    print(is_palindrome('asdsdsa'))

     

    파이썬스럽게 코딩을 한다면 이런 느낌이겠죠?

    def is_palindrome(word):
        stack = []
        for letter in word:
            stack.append(letter)
        for letter in word:
            if stack.pop() != letter:
                return False
        return True
    
    
    print(is_palindrome('asdsdsa'))

    오 꽤 괜찮은데요?
    파이썬은 가독성이 좋군요..

     

    리스트 컴프리헨션을 사용한다면...

    def is_palindrome(word):
        stack = [letter for letter in word]
        for letter in word:
            if stack.pop() != letter:
                return False
        return True
    
    
    print(is_palindrome('asdsdsa'))

     

    문자열을 list로 바로 변환을 해줍시다. 
    (for를 이용해서 쌓아주는) 스택의 느낌은 없지만.. 
    좀 더 파이썬스럽군요..

    def is_palindrome(word):
        stack = list(word)
        for letter in word:
            if stack.pop() != letter:
                return False
        return True
    
    
    print(is_palindrome('asdsdsa'))

     

    -----

    사실 회문을 검사할 때 굳이 스택을 쓸 필요는 없죠.

    def is_palindrome(word):
        for index, letter in enumerate(word):
            # if word[len(word) - index - 1] != letter:
            if word[-1 - index] != letter:
                return False
        return True
    
    
    print(is_palindrome('asdsdsa'))

     

    파이썬에서는 이렇게도 가능합니다. 

    def is_palindrome(word):
        return word == word[::-1]
    
    
    print(is_palindrome('asdsdsa'))

    너무 간단한가요?

    반응형
Designed by Tistory.