memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

1. Palindrome

팰린드롬은 한국말로 회문이라고 한다.

회문은 거꾸로 읽어도 같은 문자열이 되는 문자열을 말한다. 예를들어서, "mom", "bob", "12321" 과 같은 문자열을 말한다.

 

팰린드롬을 확인하는 방법은 여러가지가 있겠지만, 큐와 스택의 특성을 이용하면 쉽게 찾을 수 있다.

큐는 FIFO 특징을 가지고 있고, 스택은 LIFO 특징을 가지고 있다.

 

큐와 스택에 대한 개념은 아래글을 참고한다.
2020/03/28 - [Algorithm] - 큐(Queue) 와 스택(Stack) 자료구조

로직(Logic)

  1. 큐와 스택에 각각 문자열을 담는다.
  2. 큐에서 꺼낸값과 스택에서 꺼낸값이 모두 같다면 회문이다.

예를들어서, 12321 이라는 회문이 있을때,

  • 큐와 스택에 각각 담는다. => queue: 12321, stack: 12321
  • 값을 하나씩 꺼낸다.
큐(Queue) 큐에서 꺼낸 값 스택(Stack) 스택에서 꺼낸값
[2, 3, 2, 1] 1 [1, 2, 3, 2] 1
[3, 2, 1] 2 [1, 2, 3] 2
[2, 1] 3 [1, 2] 3
[1] 2 [1] 2
[] 1 [] 1

 

2. 코딩

위 로직을 따라서 파이썬으로 알고리즘을 작성해보면

<python />
# -*- coding: utf-8 -*- import unittest def is_palindrome(text): """회문(거꾸로 읽어도 같은 문자)인지 확인한다.""" queue = list() # FIFO stack = list() # LIFO # 큐와 스택에 각각 문자열을 담는다. for c in text: queue.append(c) stack.append(c) # 큐와 스택이 모두 비어있을때 까지 반복한다. (`while queue:` 또는 `while stack:` 을 사용해도 됨) while queue and stack: # 큐에서 꺼낸 값과 스택에서 꺼낸값이 다르면 회문(palindrome)이 아니다. if queue.pop(0) != stack.pop(): return False return True class Exam14(unittest.TestCase): def test_palindrome(self): self.assertTrue(is_palindrome("mom")) self.assertTrue(is_palindrome("기러기")) self.assertTrue(is_palindrome("나야나")) self.assertTrue(is_palindrome("기러기")) self.assertTrue(is_palindrome("bob")) self.assertFalse(is_palindrome("1234")) self.assertFalse(is_palindrome("blah blah")) if __name__ == "__main__": unittest.main()

 

3. Reference

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!