Python: Palindrome Algorithm - 팰린드롬 알고리즘

All We Need is Data, itself !·2021년 12월 30일
0

Algorithm-Study

목록 보기
1/1

Palindrome이란?
회문(回文) 또는 팰린드롬(palindrome)은 거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말, 숫자, 문자열(sequence of characters) 등이다. 보통 낱말 사이에 있는 띄어쓰기나 문장 부호는 무시한다. (from 위키백과)

Palindrome 알고리즘

🙄 데린이 주의! 비효율적 주의! 알고리즘을 공부하는 중입니다.ㅠ_ㅠ ✍🏻

문자열/숫자 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
profile
분명히 처음엔 데린이었는데,, 이제 개린이인가..

0개의 댓글