훈훈훈

파이썬(알고리즘) :: 회문 문자 검사 (탐색 문제) 본문

파이썬/알고리즘

파이썬(알고리즘) :: 회문 문자 검사 (탐색 문제)

훈훈훈 2020. 4. 5. 19:34

이번에는 탐색 유형 중 하나인 회문 문자 검사(대소문자를 구분하지 않음) 유형에 대해 정리해보려고 한다.

 

회문 문자는 문자를 뒤로 뒤집어서 읽어도 같은 문자열이며, 문자열 중앙을 기준으로 대칭인 특징이 있다. 

따라서 해당 유형의 알고리즘을 풀떄도 이러한 특징을 이용해서 풀어보려고 한다.

 

# 풀이 과정

먼저 대소문자를 구분하지 않기 때문에 리스트에 있는 모든 요소들을 대문자 혹은 소문자로 변환하는 작업이 필요하다.

필자는 " .lower() " 메서드를 사용하여 모두 소문자로 변환하였다.

 

그 다음 아래와 같이 대칭되는 요소들을 비교하였다. 

Input으로 주어지는 문자열의 길이를 2로 나눈 후 그 횟수 만큼 아래와 같이 비교하면 된다.

문자열이 홀수로 주어지더라도 가운데 값은 비교하는데 의미가 없기 때문에 " //2 " 로 나누어 소수점은 버리면 된다.

대칭으로 풀지 않고 파이썬에서 지원하는 문자열 인덱싱을 통해 아래와 같이 문자열을 뒤집은 후 비교하여 풀 수 있다.

if string != string[::-1]:

 

# 코드

def check(string):
    s = string.lower()
    for i in range(0,len(s)//2):
        if s[i] != s[-(i+1)]:
            return "No"
    return "YES"

string1 = "gooG"
string2 = "Google"
string3 = "level"

print(check(string1))
print(check(string2))
print(check(string3))

# 실행 결과

YES
No
No
YES
Comments