일정 길이의 대문자열 입력받고 팰린드롬(중앙기준 대칭인 문자열)출력하는 파이썬 코드인데 


아무리 대갈통 싸매고 고민해봐도 반례를 못찾겠음 나 좀 재워주셈 ㅋㅋ


기본아이디어는 문자열 길이가 홀수인지 짝수인지 판단하고나서


딕셔너리로 문자열에 있는 알파벳 각각 갯수 짝수인지 검사하고 딕셔너리에서 알파벳 하나씩 꺼내와서 반쪽짜리 팰린드롬 만들고


그 팰린드롬 역순으로 반쪽짜리에 갖다 붙이는 거임. 쓰고 나니까 존나 무식하게 풀었네 ㅋㅋ



def check_possible(string):
global odd_index
if len(string) % 2 == 0: # 문자열의 길이가 짝수인 경우.
for x in dict1:
if dict1[x]%2 != 0:
return False
return 'even'

else: # 문자열의 길이가 홀수인 경우.
count = 0
for x in dict1:
if dict1[x]%2 != 0:
count += 1
odd_index = x
if count > 1:
return False
return 'odd'

def make_palindrome(string):
global odd_index
palindrome = ''
half_palindrome = ''

if check_possible(string) == 'even':
for x in dict1:
while dict1[x] > dict2[x]/2:
half_palindrome += x
dict1[x] -= 1
palindrome += half_palindrome
for x in range(-1, -len(half_palindrome)-1, -1):
palindrome += half_palindrome[x]
print(palindrome)

elif (check_possible(string) == 'odd') & (len(string) != 1):
for x in dict1:
while dict1[x] > round(dict2[x]/2):
if dict1[x] == 1:
break
half_palindrome += x
dict1[x] -= 1
palindrome += half_palindrome

for x in range(-1, -len(half_palindrome) - 1, -1):
palindrome += half_palindrome[x]

palindrome = list(palindrome)
palindrome.insert(len(palindrome) // 2, odd_index)
print(''.join(palindrome))

else:
print('I\'m Sorry Hansoo')


string1 = input()
dict1 = {}
for x in string1:
if x in dict1:
dict1[x] += 1
else:
dict1[x] = 1
dict1 = dict(sorted(dict1.items()))
dict2 = dict(dict1)

make_palindrome(string1)