앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 예를 들어, "aba"는 팰린드롬이며 "abccca"는 팰린드롬이 아닙니다.
어떤 문자열의 부분 문자열 중 팰린드롬인 문자열이 여럿일 수 있습니다.
이 중 k번째로 큰 팰린드롬을 알고 싶습니다. k번째로 큰 팰린드롬이란, 모든 팰린드롬을 사전 순으로 나열했을 때 k번째에 위치하는 팰린드롬을 뜻합니다. 이를 위해 다음과 같이 프로그램 구조를 세웠습니다.
문자열 s와 숫자 k가 매개변수로 주어질 때, k번째로 큰 팰린드롬 문자열을 return 하도록 solution 함수를 작성하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작하도록 빈칸에 주어진 func_a, func_b, func_c 함수와 매개변수를 알맞게 채워주세요.
□ 매개변수 설명
문자열 s와 숫자 k가 solution 함수의 매개변수로 주어집니다.
s의 길이는 1 이상 100 이하입니다.
s는 알파벳 소문자로만 구성됩니다.
k는 200 이하인 자연수입니다.
□ return 값 설명
k번째로 큰 팰린드롬 문자열을 return 해주세요.
단, s로 만들 수 있는 팰린드롬 수가 k개 미만이면 "NULL"을 return 해주세요.
# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
def func_a(arr, s):
return s in arr
def func_b(s):
length = len(s)
for i in range(length // 2):
if s[i] != s[length - i - 1]:
return False
return True
def func_c(palindromes, k):
palindromes = sorted(palindromes)
if len(palindromes) < k:
return "NULL"
else:
return palindromes[k - 1]
def solution(s, k):
palindromes = []
length = len(s)
for start_idx in range(length):
for cnt in range(1, length - start_idx + 1):
sub_s = s[start_idx : start_idx + cnt]
if func_b(sub_s) == True:
if func_a(palindromes,sub_s) == False:
palindromes.append(sub_s)
answer = func_c(palindromes, k)
return answer