일정 길이의 대문자열 입력받고 팰린드롬(중앙기준 대칭인 문자열)출력하는 파이썬 코드인데
아무리 대갈통 싸매고 고민해봐도 반례를 못찾겠음 나 좀 재워주셈 ㅋㅋ
기본아이디어는 문자열 길이가 홀수인지 짝수인지 판단하고나서
딕셔너리로 문자열에 있는 알파벳 각각 갯수 짝수인지 검사하고 딕셔너리에서 알파벳 하나씩 꺼내와서 반쪽짜리 팰린드롬 만들고
그 팰린드롬 역순으로 반쪽짜리에 갖다 붙이는 거임. 쓰고 나니까 존나 무식하게 풀었네 ㅋㅋ
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)
ㄴ배운지 얼마안되서 어케하는지 알려주실 수 있으신가여?
해당 댓글은 삭제되었습니다.
친절하게 답변해주셔서 감사합니다!