회문 찾기 (큐와 스택)
문제) 문자열이 회문인지 아닌지 판단하여 회문이면 True, 아니면 False를 결과로 알려주는 알고리즘을 만들어라.
#주어진 문장이 회문인지 아닌지 찾기 (큐와 스택의 특징을 이용)
#입력 : 문자열 s
#출력 : 회문이면 True, 아니면 False
def palindrome(s):
qu = []
st = []
for x in s:
if x.isalpha():
qu.append(x.lower())
st.append(x.lower())
while qu:
if qu.pop(0) != st.pop():
return False
return True
print(palindrome("Wow"))
print(palindrome("Madam, I'm Adam."))
print(palindrome("Madam, I am Adam."))
연습문제
11-1) 큐와 스택을 이용하지 않고 회문인지 아닌지 판단할 수 있는 방법이 있다. 문장의 앞뒤를 차례로 비교하면서 각 문자가 같은지 확인하는 방법이다. 이 방법으로 회문인지 아닌지 판단하는 알고리즘을 만들어라.
#내 해답
def palindrome(s):
str_list = []
for x in s:
if x.isalpha():
str_list.append(x.lower())
while str_list:
n = len(str_list)
if n == 1 or n == 0:
return True
else:
if str_list.pop(0) != str_list.pop():
return False
print(palindrome("Wow"))
print(palindrome("Madam, I'm Adam."))
print(palindrome("Madam, I am Adam."))
#교재 해답
#주어진 문장이 회문인지 확인 (문장열의 앞뒤를 서로 비교)
#입력 : 문자열 s
#출력 : 회문이면 True, 아니면 False
def palindrome(s):
i = 0
j = len(s) - 1
while i < j:
if s[i].isalpha() == False:
i += 1
elif s[j].isalpha() == False:
j -= 1
elif s[i].lower() != s[j].lower():
return False
else:
i += 1
j -= 1
return True
print(palindrome("Wow"))
print(palindrome("Madam, I'm Adam."))
print(palindrome("Madam, I am Adam."))
출처
모두의 파이썬&알고리즘 합본호 / 이승찬 / 길벗 / 2018-12-10