python/백준 - 1213번 문제에 대한 분석임.
from collections import Counter
def palindrome(word):
answer = ""
word = Counter(word)
word_set = list(word.keys())
word_set.sort()
word_odd = [w for w in word_set if word[w]%2!=0]
for w in word_set:
answer += w*(word[w]//2)
if word_odd:
answer = answer + word_odd[0] + answer[::-1]
else:
answer = answer + answer[::-1]
return str(''.join(answer))
n = input()
counter_n = Counter(n)
check_odd = [1 if i%2!=0 else 0 for i in counter_n.values()]
if (len(n)%2==0 and sum(check_odd)==0) or\
(len(n)%2!=0 and sum(check_odd)==1):
print(palindrome(n))
else:
print("I'm Sorry Hansoo")
from collections import Counter
def palindrome(word):
answer = ""
word = Counter(word)
word_set = list(word.keys())
word_set.sort()
word_odd = [w for w in word_set if word[w]%2!=0]
for w in word_set:
answer += w*(word[w]//2)
if word_odd:
answer = answer + word_odd[0] + answer[::-1]
else:
answer = answer + answer[::-1]
return str(''.join(answer))
팰린드롬 문자열로 변환하여 반환해주는 함수
(반드시 팰린드롬 문자열로 만들 수 있는 경우에만 해당 함수가 호출됨.)
word = Counter(word): Counter 객체 생성
word_set = list(word.keys()): Coutner 객체의 고유 원소를 list type으로 변경하여 할당
word_set.sort(): 출력이 사전순이기 때문에 오름차순 정렬
word_odd = [w for w in word_set if word[w]%2!=0]: 만약 문자열이 길이가 홀수인 경우 원소의 갯수가 홀수개의 문자열이 존재하므로 해당 문자열을 찾아서 list에 저장함.answer += w*(word[w]//2): str객체인 answer에 각 문자를 문자 갯수의 1/2개를 더함.
answer = answer + word_odd[0] + answer[::-1]: 만약 word_odd가 빈 list가 아니라면 전체 문자열의 길이는 홀수개란 의미이며 홀수개에 해당하는 문자열 1개는 반드시 중앙에 와야함.
answer = answer + answer[::-1]: word_odd가 빈 list라면 좌우 대칭해주면 팰린드롬 문자열이 완성됨.
n = input()
counter_n = Counter(n)
check_odd = [1 if i%2!=0 else 0 for i in counter_n.values()]
if (len(n)%2==0 and sum(check_odd)==0) or\
(len(n)%2!=0 and sum(check_odd)==1):
print(palindrome(n))
else:
print("I'm Sorry Hansoo")
check_odd = [1 if i%2!=0 else 0 for i in counter_n.values()]: Counter객체의 values값.(len(n)%2==0 and sum(check_odd)==0): 팰린드롬 문자열로 변형이 가능.len(n)%2==0: 문자열 길이 짝수sum(check_odd)==0: 원소의 갯수가 홀수개인 원소 갯수 0개(len(n)%2!=0 and sum(check_odd)==1): 팰린드롬 문자열로 변형이 가능.len(n)%2==0: 문자열 길이 홀수sum(check_odd)==0: 원소의 갯수가 홀수개인 원소 갯수 1개print(palindrome(n)): 위 조건을 만족시키면 팰린드롬 문자열로 변형이 가능한 문자열이므로 함수를 호출하여 팰린드롬 문자열을 반환받고 출력함.