긴 문자열을 가운데 기준으로 나누어 두 부분이 서로 같은지 확인할 수 있습니다. 입력 문자열은 글자 수가 짝수일 수도 있고 홀수일 수도 있습니다. 글자 수가 짝수라면 전체 길이의 절반을 기준으로 왼쪽과 오른쪽 두 부분으로 나누면 되고, 글자 수가 홀수라면 정중앙에 있는 문자 하나를 무시한 뒤 나머지 두 부분만 비교하면 됩니다.
아래 프로그램에서는 위의 로직을 적용해 입력 문자열을 두 부분으로 나눈 다음, 각 부분을 리스트로 변환하고 정렬하여 비교합니다. 정렬 후 두 리스트가 같다면 양쪽 절반에 동일한 문자들이 포함되어 있다는 의미입니다.
예제 코드
from collections import Counter
def comparehalves(input_string):
str_len = len(input_string)
# 글자 수가 홀수인 경우
# 가운데 문자는 무시
if (str_len % 2 != 0):
left = input_string[0:int(str_len / 2)]
right = input_string[(int(str_len / 2)) + 1:]
else:
left = input_string[0:int(str_len / 2)]
right = input_string[int(str_len / 2):]
# 각 부분을 리스트로 변환하고 정렬
l1 = list(left)
l1.sort()
l2 = list(right)
l2.sort()
if l1 == l2:
print ("Same character in both halves")
else:
print ("Both halves are different ")
in_string = input("Enter String: ")
comparehalves(in_string)실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
# Run1 Enter String: Tutorials Both halves are different # Run2 Enter String: TutTut Same character in both halves
코드 설명
첫 번째 실행 예시인 "Tutorials"는 총 9글자로 홀수입니다. 이 경우 가운데 문자 'r'을 제외하고 왼쪽 "Tuto"와 오른쪽 "ials"를 비교하게 되며, 구성 문자가 다르므로 "Both halves are different"가 출력됩니다.
두 번째 실행 예시인 "TutTut"는 6글자로 짝수이며, 왼쪽 "Tut"와 오른쪽 "Tut"가 완전히 동일하므로 "Same character in both halves"가 출력됩니다.
참고로 collections 모듈의 Counter를 활용하면 정렬 대신 각 부분의 문자 빈도수를 딕셔너리 형태로 비교하는 방법도 사용할 수 있습니다. 이 경우 Counter(left) == Counter(right) 한 줄로 동일한 결과를 얻을 수 있어 코드가 더 간결해집니다.