Hi

[백준/Python] 1213. 팰린드롬 만들기 본문

Algorithm/Baekjoon

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

seungminleeee 2025. 1. 3. 00:37

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

 

팰린드롬은 대칭 형태의 문자열이기 때문에 홀수개의 문자가 1개보다 많으면 안된다.

그래서 딕셔너리의 값이 홀수일 경우를 세서 2 이상이면 종료시켰다.

 

처음에는 빈 문자열 두개에 문자를 넣고 뒷부분이 될 문자열만 역순으로 정렬하려고 했는데

sorted로 정렬해야하니 문자열 → 리스트 → 문자열 순서로 정렬되어서 마음에 안들었다.

그래서 그냥 앞 부분이 될 빈 문자열 하나와 뒷 부분이 될 빈 리스트 하나에 각각 문자를 넣었다.

딕셔너리 값이 1인 경우에도 빈 문자열에 추가하였다.

이후에 뒷부분 리스트는 역순으로 정렬해서 문자열로 만들었다.

 

from collections import defaultdict

text = input()
name = sorted(text)
word = defaultdict(int)

for n in name:
    word[n] += 1

cnt = 0
for c in word.values():
    if c % 2 == 1:
        cnt += 1
    if cnt >= 2:
            print("I'm Sorry Hansoo")
            exit()

ans = ""
we = []
plus = ""

for w in sorted(word.keys()):
    while word[w] > 0:
        if word[w] == 1 and plus == "":
            plus += w
            word[w] -= 1
        else:
            ans += w
            we.append(w)
            word[w] -= 2

we.sort(reverse=True)
wer = "".join(we)

answer = ans + plus + wer
print(answer)