백준 1213_팰린드롬 만들기 / Python

2024. 7. 26. 18:59백준

문제

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

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

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

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

입력

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

출력

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

예제 입력 1 

AABB

예제 출력 1 

ABBA

예제 입력 2 

AAABB

예제 출력 2 

ABABA

예제 입력 3 

ABACABA

예제 출력 3 

AABCBAA

예제 입력 4 

ABCD

예제 출력 4 

I'm Sorry Hansoo

알파벳마다 갯수를 세고.. 홀수인 알파벳이 두개면 못만듦. 

홀수인거 하나면 따로 저장해두고

전체에서 앞에서부터 각 갯수의 반을 출력+(중간값 출력)+뒤에서부터 나머지 갯수만큼 출력!

import sys

word=sys.stdin.readline().rstrip()
w_dict={"A": 0, "B": 0, "C": 0, "D": 0, "E": 0, "F": 0, "G": 0, "H": 0, "I": 0, "J": 0, "K": 0, "L": 0, "M": 0, 
        "N": 0, "O": 0, "P": 0, "Q": 0, "R": 0, "S": 0, "T": 0, "U": 0, "V": 0, "W": 0, "X": 0, "Y": 0, "Z": 0}

#알파벳마다 갯수 세주기
for w in word:
  w_dict[w] += 1

available = 1
middle = ""
for alphabet in w_dict:
  if w_dict[alphabet] % 2 == 1:
    if available == 0: #개수가 홀수인 알파벳이 두개이면 못만듦
      print("I'm Sorry Hansoo")
      sys.exit()
    middle=alphabet
    available = 0

#앞에서부터 갯수의 반만큼 출력
for alphabet in w_dict: 
  half = w_dict[alphabet]//2
  for i in range(half):
    print(alphabet, end ='')
  w_dict[alphabet] //= 2

#중간글자 출력. 없다면 ""출력됨  
print(middle, end ='')

#뒤에서부터 나머지 반 출력
for alphabet in dict(list(w_dict.items())[::-1]): 
  for i in range(w_dict[alphabet]):
    print(alphabet, end ='')

맞았다!!! 처음 생각하고 구현한 로직으로 한번에 맞다니!! 대박~

'백준' 카테고리의 다른 글

백준 1449_수리공 항승 / Python  (0) 2024.07.26
백준 17626_Four Squares / Python  (1) 2024.07.26
백준 17413_단어 뒤집기2 / Python  (0) 2024.07.25
백준 2346_풍선 터뜨리기 / Python  (0) 2024.07.18
백준 2407_조합 / Python  (0) 2024.07.18