본문 바로가기

IT/Python

[백준] 1213번 팰린드롬 만들기 [Python]

728x90

팰린드롬$($palindrome$)$: 거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말, 숫자, 문자열 등

주어진 문자열로 팰린드롬 만들기

 

더보기

문제

임한수와 임문빈은 서로 사랑하는 사이이다.

임한수는 세상에서 팰린드롬인 문자열을 너무 좋아하기 때문에, 둘의 백일을 기념해서 임문빈은 팰린드롬을 선물해주려고 한다.

임문빈은 임한수의 영어 이름으로 팰린드롬을 만들려고 하는데, 임한수의 영어 이름의 알파벳 순서를 적절히 바꿔서 팰린드롬을 만들려고 한다.

임문빈을 도와 임한수의 영어 이름을 팰린드롬으로 바꾸는 프로그램을 작성하시오.

 

입력
첫째 줄에 임한수의 영어 이름이 있다. 알파벳 대문자로만 된 최대 50글자이다.

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

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

 

s = input()

# 문자열의 알파벳을 key로, 그 알파벳의 개수를 value로 하는 Dictionary
d = {a:s.count(a) for a in set(s)}

# c는 홀수 개인 알파벳의 수 
c, u = 0, "" 
for k, v in d.items():
    if v % 2 != 0:
        c += 1
        u = k
        
# 홀수 개인 알파벳이 2개 이상이면, 팰린드롬 만들기 불가능
if c > 1:
    r = "I'm Sorry Hansoo"

# 알파벳을 사전순으로 존재하는 절반만 포함하는 리스트 생성
# 그 리스트 문자열로 만들고 또 그 리스트를 뒤집어서 문자열로 만들어서 이어 붙이기
# 홀수 개인 알파벳이 있다면 u에 저장되어 한 가운데에 위치할 것임
else:
    r = sorted([a*(d[a]//2) for a in set(s)])
    r = "".join(r) + u + "".join(reversed(r))
print(r)

 

더보기

예제 입력 1 

AABB

예제 출력 1

ABBA

예제 입력 2

AAABB

예제 출력 2 

ABABA

예제 입력 3 

ABACABA

예제 출력 3 

AABCBAA

예제 입력 4 

ABCD

예제 출력 4 

I'm Sorry Hansoo