UNIT 11 (자료 구조)

정우석·2024년 5월 16일

회문 찾기 (큐와 스택)

문제) 문자열이 회문인지 아닌지 판단하여 회문이면 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

0개의 댓글