앎을 경계하기

Programming/Python

Python Palindrome(회문) 판별

양갱맨 2020. 1. 2. 00:12

출처 : 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