출처 : https://dojang.io/mod/page/view.php?id=2331
파이썬 코딩 도장: 28.1 회문 판별하기
Unit 28. 회문 판별과 N-gram 만들기 이번에는 문자열을 응용해서 회문을 판별하는 방법과 N-gram을 만드는 방법을 알아보겠습니다. 회문은 유전자 염기서열 분석에서 많이 쓰고, N-gram은 빅 데이터 분석, 검색 엔진에서 많이 쓰입니다. 특히 구글은 책들을 스캔해서 N-gram viewer를 만들었는데 사람들의 언어 패턴을 시대별로 분석하기도 했습니다. 28.1 회문 판별하기 회문(palindrome)은 순서를 거꾸로 읽어도 제대로 읽은 것과
dojang.io
Palindrome : 회문, 단어나 문장이 그 순서를 뒤집은 경우와 같은 것을 말한다.
example : "level", "kayak", "ABBA", "SOS" ...
회문 판별은 다음과 같다.
1. i = 0일 때,
2. i번째 문자와 len(문자열)-i 번째 문자가 같은가?
2번 조건을 문자열을 반으로 나눈 길이 만큼 반복해서 체크했을 때 전부 'yes'에 해당하면 그 문자열은 회문이다.
이때, 문자열은 홀수인 경우와 짝수인 경우로 나뉘는데,
홀수이면 문자열길이 / 2 가 정수로 딱 나눠 떨어지지 않는다.
따라서 파이썬에서는 문자열길이 // 2로 해서 2로 나눈 몫만큼 반복하도록 해야한다.
word = input('단어를 입력하세요: ')
is_palin = True
for i in range(len(word)//2):
if word[i] != word[-1-i]:
is_palin = False
break
print(is_palin)
문자열 길이의 절반만큼 반복하면서 각 인덱스의 문자가 같지 않으면 회문이 아니라고 판단하고 반복을 멈춘다.
슬라이싱 방법을 사용해서 문자열을 뒤집어 판단해보자.
word = input('단어를 입력하세요 :')
print(word == word[::-1])
[::-1] 를 사용하면 문자열을 뒤집을 수 있다.
각 문자를 순서대로 체크하여 word와 word[::-1]이 같으면 True를 반환한다.
reverse()를 사용해서 문자열을 뒤집고 list로 생성하여 두 단어를 비교한다.
word = 'level'
list(word) == list(reversed(word))
reverse()를 사용해서 문자열을 뒤집고 문자열로 생성하여 두 단어를 비교한다.
word = 'level'
word == ''.join(reversed(word))
위와 같은 방법으로 굉장히 간단하게 회문을 비교할 수 있다.
'Programming > Python' 카테고리의 다른 글
파이썬 '...' ellipsis 의미 (0) | 2020.10.26 |
---|---|
Python N-gram 생성 (0) | 2020.01.02 |
Python 객체 파일에 저장하기 (0) | 2020.01.01 |
Python 내장 함수 (0) | 2019.12.26 |
Python 예외 처리 (0) | 2019.12.26 |