본문 바로가기
백준 알고리즘/Python

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

by 리버🐦‍🔥 2023. 9. 4.

[Silver III]

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

 

1213번: 팰린드롬 만들기

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

www.acmicpc.net

풀이

  1. 팰린드롬이 되려면 개수가 홀수인 알파벳이 1개 이하여야 한다. 2개 이상일 경우 팰린드롬을 만들 수 없다.
     1.1 만약 1개일 경우, 입력받은 리스트에서 개수가 홀수인 알파벳을 따로 빼 저장한다.
  2. 팰린드롬을 만들기 위해 사전순으로 알파벳을 정렬한 후, index를 2씩 증가시키며 알파벳을 추출한다. (자연스럽게 사전순으로 출력)
  3. [(2)를 통해 만든 앞의 절반 + (1-1)에서 뺀 알파벳 + (2)에 reverse를 적용시킨 리스트]를 모두 더하여 팰린드롬을 완성시킨다.
from collections import deque
inputList = list(input())
resultList = list()
d = deque()
cnt = 0
tempAlphabet = ''

inputList.sort()

for i in range(ord('A'), ord('Z') + 1):
    if inputList.count(chr(i)) % 2 == 1:
        cnt += 1
        index = inputList.index(chr(i))
        tempAlphabet = inputList.pop(index)
        if cnt >= 2:
            print("I'm Sorry Hansoo", end="")
            quit()

for i in range(0, len(inputList), 2):
    resultList.append(inputList[i])
reverseList = resultList.copy()
reverseList.reverse()
resultList.append(tempAlphabet)
resultList += reverseList
print("".join(resultList), end="")