Palindrome이란?
회문(回文) 또는 팰린드롬(palindrome)은 거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말, 숫자, 문자열(sequence of characters) 등이다. 보통 낱말 사이에 있는 띄어쓰기나 문장 부호는 무시한다. (from 위키백과)
🙄 데린이 주의! 비효율적 주의! 알고리즘을 공부하는 중입니다.ㅠ_ㅠ ✍🏻
문자열/숫자 P가 하나의 str으로 입력될 때, ex. P = 12321
이 P에 들어있는 숫자가 Palindrome인지 아닌지를 검사하고자 한다면
def <is_Palindrome(P):
for i in range(len(P)//2):
if P[i] == P[-1-i]:
continue
else:
return False
return True
출력:
print(is_Palindrome('12321'))
print(is_Palindrome('12454321')
True
False
그렇다면 숫자의 리스트는 어떻게 될까?
P = ['123', '21']
이런 리스트를 받으면, 두개를 붙여서 Palindrome으로 검사해주면 된다.
def is_Palindrome(P):
num = "".join(P)
for i in range(len(num)//2):
if num[i] == num[-1-i]:
continue
else:
return False
return True
왜 저걸 언급했냐면,
만약 각각의 숫자 리스트 P를 섞을 수 있다면?
다른 말로, P = ['123', '12']
라면, 그냥 붙이면 12312
가 되어 Palindrome이 성립하지 않겠지만, 12321
로 재조합하여 붙일 수 있다고 친다면 어떻게 구현해야 할까?
! 저는 여기서 permutation을 사용했습니다.
from itertools import permutations
def sorted_Palindrome(P):
num1, num2 = P
num_list = list(num1) + list(num2)
pmt_list = list(permutations(num_list, len(num_list)))
nums = []
for p in pmt_list:
nums.append("".join(p))
nums = list(set(nums))
for n in nums:
if is_Palindrome(n) == True:
return True
elis is_Palindrome(n) == False:
continue
return False