문자열 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)입니다.