백준 문제 링크
팰린드롬 만들기
- 먼저, 영어 이름에 있는 알파벳의 개수를 파악해야 한다.
그 이유는 'AABB'의 경우 A와 B가 각각 2개이므로 AB를 붙인 뒤 뒤집어서 붙여주면 'ABBA'가 되지만, 'AAABB'의 경우 A와 B가 각각 3개, 2개 이므로 이전 방법은 적용할 수 없다. ABABA로 만들기 위해서는 'AB' + 'A' + 'BA'로 구성해야 하기 때문이다.- 알파벳의 개수가 홀수인 경우에 center에 그 알파벳을 넣어주고,
odd 값을 1 증가시킨다.- 이제부터 odd의 값 별로 조건문을 설정할건데,
odd가 0인 경우는 'AABB'처럼 모든 알파벳의 개수가 짝수이므로 뒤집어서 붙여주면 된다.
odd가 1인 경우는 'AAABB'에서 'AB' + 홀수인 알파벳 A + 'BA'로 붙여주면 된다.
odd가 2이상인 경우는 'ABCD'처럼 팰린드롬으로 나타낼 수 없다.
from collections import Counter
x = list(map(str , input()))
x.sort()
count = Counter(x)
# 알파벳의 개수를 파악
odd = 0
center = ''
ans = ''
for i in count:
if count[i] % 2 != 0 : # 개수가 홀수이면 중앙으로 보냄
center += i
odd += 1
for _ in range(count[i] // 2):
ans += i
if odd > 1:
print("I'm Sorry Hansoo")
elif odd == 0:
print(ans + ans[::-1])
else:
print(ans + center + ans[::-1])
x = input()
dic = {}
temp = ''
center = ''
odd = 0
for i in x:
if i not in dic:
dic[i] = 1
else:
dic[i] += 1
for i in dic.items():
if i[1] % 2 != 0:
odd += 1
sort_dic = sorted(dic.items())
dic2 = {}
for i in sort_dic:
if i[0] not in dic2:
dic2[i[0]] = i[1]
if odd > 1:
print("I'm Sorry HanSoo")
elif odd == 0:
for i,j in dic2.items():
temp += i * int(j/2)
dic2[i] -= j
temp = temp + temp[::-1]
else:
for i,j in dic2.items():
if j % 2 != 0:
center += i
temp += i * int(j/2)
dic2[i] -= 1
else:
temp += i * int(j/2)
dic2[i] -= j
temp = temp + center + temp[::-1]
print(temp)
# 예제와 백준에 있는 반례도 맞았지만 제출에는 실패한 코드이다. ㅠㅠ
Counter함수를 잘 활용해야겠다..