-
28.4 심사문제 : 파일에서 회문인 단어 출력하기코딩도장 심사문제모음 2020. 11. 1. 16:04728x90
단어가 줄 단위로 저장된 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'코딩도장 심사문제모음' 카테고리의 다른 글
29.4 심사문제 : 사칙 연산 함수 만들기 (0) 2020.11.02 29.3 연습문제 : 몫과 나머지 구하는 함수 만들기 (0) 2020.11.02 28.3 연습문제 : 단어 단위 N-gram 만들기 (0) 2020.11.01 27.6 심사문제: 특정 문자가 들어있는 단어 찾기 (0) 2020.10.29 27.5 연습문제 : 파일에서 10자 이하인 단어 개수 세기 (0) 2020.10.29