Algorithm - kpalindrome
최대 1 분 소요
Problem
- palindrome이 무엇인지는 이미 다들 알고 계신것 같아용, 앞뒤로 읽어도 똑같은 스트링을 말합니당(1577 1577말고 1577 7751 이용)
- 다만, kpalindrome의 경우는 해당 문자열에서 k개 이하의 문자를 삭제했을때, palindrome이 되는지를 확인해주는 함수를 말합니다.
- 왠지 간단하게 풀 수 있을 것 같은 착각이 드는데, 아마도 그렇다면 이 문제 또한 계산시간이 오래 걸리겠죠.
solution
- 생각보다 쉽게 해결되어서 좀 당황스러운데….
- 아무튼, palindrome은 우선 끝에서부터 체크를 하면 될것 같았습니다.
- 왼쪽 끝과 오른쪽 끝의 문자가 같은 경우: call kpalindrome(s[1:-1], k)
- 다를 경우:
- 왼쪽을 삭제할 경우: call kpalindrome(s[1:], k-1)
- 오른쪽을 삭제할 경우: call kpalindrome(s[:-1], k-1)
- 아무튼 이렇게 풀었습니다.
def isPalindrome(s):
if len(s)<=1:
return True
else:
if len(s)%2==0:
return s[:len(s)//2]==s[len(s)//2:][::-1]
else:
return s[:len(s)//2]==s[len(s)//2+1:][::-1]
def kpalindrome(s, k):
if len(s)<k:
return True
else:
if k==0:
return isPalindrome(s)
else:
if s[-1]==s[0]:
return kpalindrome(s[1:-1], k)
else:
return any([kpalindrome(s[1:], k-1), kpalindrome(s[:-1], k-1)])
댓글남기기