📝 문제
💡 임한수와 임문빈은 서로 사랑하는 사이이다.
임한수는 세상에서 팰린드롬인 문자열을 너무 좋아하기 때문에,
둘의 백일을 기념해서 임문빈은 팰린드롬을 선물해주려고 한다.
임문빈은 임한수의 영어 이름으로 팰린드롬을 만들려고 하는데,
임한수의 영어 이름의 알파벳 순서를 적절히 바꿔서 팰린드롬을 만들려고 한다.
임문빈을 도와 임한수의 영어 이름을 팰린드롬으로 바꾸는 프로그램을 작성하시오.
⚙️ 입력 : 첫째 줄에 임한수의 영어 이름이 있다.
알파벳 대문자로만 된 최대 50글자이다.
⚙️ 출력 : 첫째 줄에 문제의 정답을 출력한다.
만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다.
정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
1213번: 팰린드롬 만들기
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
www.acmicpc.net
✅ 풀이
t = input()
s = list(t)
s.sort()
dict = {}
for item in s:
if item not in dict.keys():
dict[item] = 1
else:
dict[item] += 1
answer = ''
for k, v in dict.items():
for i in range(v//2):
answer += k
dict[k] -= (v//2 * 2)
temp = answer[-1::-1]
li = [k for k,v in dict.items() if v == 1]
if answer == temp[-1::-1] and (len(li) == 0 or len(li)) == 1:
for item in li:
answer += item
print(answer + temp)
else:
print("I'm Sorry Hansoo")
💡 사전순으로 가장 앞서는 팰린드롬을 만들기 위해서,
입력된 문자열을 정렬한 후 각 문자별로 갯수를 세주었다.
answer는 팰린드롬의 왼쪽 부분을 담당할 예정이다.
이 친구에게 각 문자 갯수의 절반만큼을 사전 순으로 붙이고,
각 문자 갯수는 양쪽을 다 붙였다고 생각하고 2배씩 빼주었다.
그렇게 만들어낸 answer를 거꾸로 뒤집은 오른쪽 부분인 temp를 만든다.
고민한 결과로는, 홀수개인 문자가 0개 또는 1개인 경우만 가능하다.
(아마 맞았으니까 올바른 사고였던 것 같음..)
따라서, answer와 temp를 또 뒤집은 것이 같고 홀수개 문자가 0개 또는 1개인 경우,
answer에 홀수개인 문자를 마저 붙이고 temp를 붙여 출력했다.
그렇지 않은 경우는 팰린드롬 만들기가 불가능하므로,
주어진 문자열을 출력했다.