파이썬 txt 파일 회문으로 출력 질문드립니다.

조회수 705회

txt 파일에 회문인 단어와 회문이 아닌 단어를 섞어 넣고 enter로 단어를 구분합니다.

abba
gooloog
sosoassaosos
became
smilims
level
madam
mom
...

이런식으로 된 텍스트 파일을 읽어서 결과적으로 회문이 아닌 단어는 제외하고 회문인 단어만 출력하는 것인데 어떻게 출력 할 수 있을까요

출력 예

abba
gooloog
sosoassaosos
...

단어를 구분해서 리스트에 넣는 것과 스택과 큐를 사용해서 회문 검사후 출력, 이 두가지를 연결을 못짓겠습니다..

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() != st.pop():
            return False
    return True

with open('Palindrome_file.txt','r') as f:
    list_file = []
    for line in f:
        list_file.append(line)

for i in len(list_file):
    print(palindrome(i))

아직 완성 된 것은 아니지만 지금까지 정리한 것은 이 정도 입니다. 많은 답변 부탁드립니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • palindrome 관련 알고리즘은 인터넷에 너무 많습니다만 파이썬이라면 index에 의한 접근이 용이해서 스택, 큐를 꼭 사용할 필요는 없어보입니다.

    파이썬은 변수 s로 문자열 abcd 가 있을때 아래와 같이 index로 접근이 가능합니다. - 기호로 뒤에서부터 접근할 수 있습니다.

    s = 'abcd'
    s[0] # a
    s[-1] #d
    
    def palindrome(s):
        for i in range(len(s) // 2): # 문자열의 반의 길이만큼만 반복
            if s[i] != s[-(i + 1)]: return False    # 앞의 문자와 뒤의 문자 비교하여 다르면 False
        return True # 다른 것이 없었다면 True
    

    파이썬은 iterator 에 일관성이 있습니다. 무슨 의미인가 하면 파이썬은 for 등에 사용하면 이것이 반복이 가능한 것인지를 최대한 찾아낸다는 겁니다. 이 부분을 잘 이해하고 있어야 간결한 코딩을 할 수 있습니다.

    iter 를 구현하고 있는 대표적인 것이 str, list, tuple, dict, file, generator 입니다. 이것은 반복에 들어오면 알아서 iter 메소드에 의해 반복이 가능합니다.

    정리하면 별도로 list에 저장할 필요없이 아래와 같이 바로 이용하면 됩니다.

    with open('Palindrome_file.txt','r') as f:
        words = [word.rstrip() for word in f if palindrome(word.rstrip())]   # rstrip() 을 하는 이유는 라인피드 문자(\n) 제거
        print(words)
    
    

    정리하면 아래와 같이 될 겁니다.

    def palindrome(s):
        for i in range(len(s) // 2):
            if s[i] != s[-(i + 1)]: return False
        return True
    
    with open('Palindrome_file.txt','r') as f:
        words = [word.rstrip() for word in f if palindrome(word.rstrip())]
        print(words)
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)