알고리즘

[백준 알고리즘] 1213번 팰린드롬 만들기. 파이썬(python)

삶은겨란 2022. 10. 26. 17:22

https://www.acmicpc.net/problem/1213

 

1213번: 팰린드롬 만들기

첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.

www.acmicpc.net

- 각 알파벳이 몇개인지 카운트

- 홀수개는 무조건 1개만 있어야 한다

- 사전순이므로 (앞에서 부터 //2 개수만큼 출력)+(홀수개였던거 출력)+(뒤에서부터 //2개수만큼 출력)

 

 

import sys
input=sys.stdin.readline

s=input().strip()
alphas=[0 for _ in range(27)]
odds=0
oddidx=-1
answer=''
for i in s:
    alphas[ord(i)-65]+=1

for i in range(len(alphas)):
    if alphas[i]%2==1:
        odds+=1
        oddidx=i
        if odds==2: # 홀수의 개수가 2 이상이면
            print("I'm Sorry Hansoo")
            exit()
alphas[oddidx]-=1 # 홀수 알파벳 하나 제외

for i in range(len(alphas)):
    for _ in range(alphas[i]//2):
        answer+=chr(i+65)
if oddidx!=-1:
    answer+=chr(oddidx+65)

for i in range(len(alphas)-1,-1,-1):
    for _ in range(alphas[i]//2):
        answer+=chr(i+65)

print(answer)