ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 28.4 심사문제 : 파일에서 회문인 단어 출력하기
    코딩도장 심사문제모음 2020. 11. 1. 16:04
    728x90

    단어가 줄 단위로 저장된 words.txt 파일이 주어집니다. words.txt 파일에서 회문인 단어를 각 줄에 출력하는 프로그램을 만드세요. 단어를 출력할 때는 등장한 순서대로 출력해야 합니다. 그리고 파일에서 읽은 단어는 \n이 붙어있으므로 \n을 제외한 뒤 회문인지 판단해야 하며 단어를 출력할 때도 \n이 출력되면 안 됩니다(단어 사이에 줄바꿈이 두 번 일어나면 안 됨).

    사용한 코드

    1. with as 문

    2. for 문

    3. if 문

    4. list

    5. reversed

    6. strip

    첫 접근 방법

    메모장에 포함되어 있는 text 들에 \n을 유의하여

    회문 비교시와 출력시 \n을 제외해야하는점만 인지하면 해결 할 수 있다.

    회문을 판별하는 어떤 방법을 사용하든 정답으로 인정되며

    풀이1 에서는 list와 reversed를 이용해서 풀이하였으며

    풀이2에서는 코딩도장 해설을 바탕으로 작성해보았다.

    풀이.1

    1. with as 구문으로 해당 words파일을 읽기모드로 열어준 후 readlines() 메서드를 이용해 파일의 내용을 

    한줄씩 리스트로 가져온다.

    with open ('words.txt', 'r') as file:
        text = file.readlines() 
        # text = ['apache\n', 'decal\n', 'did\n', 'neep\n', 'noon\n', 'refer\n', 'river']

    2.  할당한 text 리스트를 이용해 for 문 을 사용한다

    여기서 len(text) 로 # 0 ~ 6까지 반복 횟수를 정해준다

    with open ('words.txt', 'r') as file:
        text = file.readlines()
        for i in range(len(text)):
            

    3. list의 요소 값으로 비교하기 위해 a b 두 변수를 새로 할당하였다

    a 에는 i값에 따라 할당하는데 양옆의 \n는 삭제하면서 text 요소 1개를 이용해 list로 만들어준다.

    text[0] == apache // a = list(text[0]) == ['a', 'p', 'a', 'c', 'h', 'e']

    b에는 reversed를 이용해 리스트 각 요소를 뒤집어 a와 비교를 해주기 위해 사용하였다

    a == ['a', 'p', 'a', 'c', 'h', 'e'] //  b == [e, h, c, a, p, a]

    with open ('words.txt', 'r') as file:
        text = file.readlines()
        for i in range(len(text)):# 0 ~ 6
            a = list(text[i].strip('\n')) # ['a', 'p', 'a', 'c', 'h', 'e']
            b = list(reversed(text[i].strip('\n'))) # ['e', 'h', 'c', 'a', 'p', 'a']
            if a == b :
                print(text[i].strip('\n')) # 출력시 \n 다시한번 삭제
                
    ::
    did
    noon
    refer

    ## 리스트 각 요소 값이 같은지 비교하는 == 연산자 이용해 뒤집었을때의 값이 같을때만 출력하여 회문을 판별한다.

    print시 양옆 \n 삭제하는것을 유의하자

    풀이.2

    처음 생각하였던 코드에서 strip'\'n 이 너무 많이 등장해 복잡하게 느껴지고 가독성도 좋지 않다.

    1. with as 문 동일

    2. readlines()로 file안의 내용을 한줄씩 리스트로 words에 할당한다.

    3. words 리시트에서 직접 word라는 변수로 가져올 수 있도록 반복문을 구성

    여기서 words 에서 가져오는 word에는 \n을 포함하고 있어 삭제를 해주지 않으면 정확한 회문 판별 불가능

    아래의 두 코드에서 차이점은 strip 재할당 유무의 strip의 위치에 차이가 있는데

    회문 판별시 \n를 제거해주지 않으면 정확한 회문을 판별할 수 없다

    a p p l e \n

    \n e l p p a

    with open ('words.txt', 'r') as file:
        words = file.readlines()
        for word in words:      
            word = word.strip('\n')     # strip 위치
            if word == word[::-1]:
                print(word)
    ::
    did
    noon
    refer

     

    with open ('words.txt', 'r') as file:
        words = file.readlines()
        for word in words:
            if word == word[::-1]:
                print(word.strip('\n'))  # strip 위치
    

    728x90
Designed by Tistory.