Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 문자열이 콜린드롬(Colidrome)인지 확인하는 방법

문자열 s가 주어졌을 때, 해당 문자열이 콜린드롬(colidrome)인지 판별해야 합니다. 콜린드롬이란 길이 6짜리 팰린드롬(회문) 여러 개를 이어 붙여 만든 문자열을 의미합니다.

예를 들어 입력이 s = "aabbaamnoonm"라면 결과는 True가 됩니다. 이 문자열은 "aabbaa"와 "mnoonm"이라는 두 개의 길이 6 팰린드롬으로 구성되어 있기 때문입니다.

문제 해결 접근 방법

이 문제는 다음 단계를 통해 해결할 수 있습니다.

  • 먼저 문자열 s의 길이가 6의 배수인지 확인합니다. 6의 배수가 아니라면 콜린드롬일 수 없으므로 False를 반환합니다.
  • 이후 인덱스 0부터 시작하여 6칸씩 건너뛰며 각 부분 문자열을 검사합니다.
  • 각 부분 문자열 s[i : i+6]이 팰린드롬이 아니라면 False를 반환합니다.
  • 모든 부분 문자열이 팰린드롬이라면 최종적으로 True를 반환합니다.

구현 예제

아래 코드를 통해 더 자세히 이해해 보겠습니다.

def is_palindrome(s):
    return s == s[::-1]

def solve(s):
    if len(s) % 6 != 0:
        return False
    for i in range(0, len(s), 6):
        if not is_palindrome(s[i : i+6]):
            return False
    return True

s = "aabbaamnoonm"
print(solve(s))

입력

"aabbaamnoonm"

출력

True

코드 설명

is_palindrome 함수는 파이썬의 슬라이싱 기법 s[::-1]을 활용해 문자열을 뒤집은 값과 원본을 비교함으로써 회문 여부를 간단하게 판별합니다. 시간 복잡도는 O(n)입니다.

solve 함수는 먼저 전체 길이가 6으로 나누어떨어지는지 검사한 뒤, 6글자씩 잘라낸 각 조각에 대해 회문 검사를 수행합니다. 하나라도 조건을 만족하지 않으면 즉시 False를 반환하므로 효율적입니다.

전체 알고리즘의 시간 복잡도는 O(n)이며, 공간 복잡도 역시 슬라이싱에 따라 O(n)입니다.