본문 바로가기

코딩테스트/Python

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

문제


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

 

1213번: 팰린드롬 만들기

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

www.acmicpc.net

 

 

풀이


from collections import Counter
ss = list(input())

dic = Counter(ss) # 개수 세주기
cnt=1
answer=[]
one = ''
for d in dic:
    for i in range(dic[d]//2): # 반만큼 answer에 더하기
        answer.append(d)
    if dic[d]%2!=0: # 홀수일경우
        if cnt==2: # 홀수인게 한개가 넘을경우
            print("I'm Sorry Hansoo") # 실패
            break
        else:
            cnt+=1 # 홀수가 하나일경우
            one=d # 홀수 값 저장

else:
    answer.sort() # 사전순으로 정렬해주기
    print('%s%s%s'%(''.join(answer),one,''.join(answer[::-1]))) # 정렬된값 + 홀수 값 + 정렬 역순 값

순열을 구해서 찾으니 시간초과가 났다.

 

사전순으로 정렬된 값 + 한개만 있는 문자열 + 사전순으로 정렬된 값의 역순

을 구해주었다.