-
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'))
너무 간단한가요?
반응형