백준 1213 팰린드롬 만들기 python

곰개구리·2023년 6월 21일
0

알고리즘

목록 보기
3/5
post-thumbnail
post-custom-banner

Concept

Map, Sort를 이용해 해결했다
각 문자별 나타나는 횟수를 기록하고 사전 순으로 정렬하여 정답 문자열을 생성하였다

핵심 예외처리!

갯수가 홀수 인 문자가 존재하는 경우

  1. 해당 문자가 하나인 경우

    • 가능하다!
      - 해당 문자의 갯수에서 하나를 빼 중간에 고정한다
      이 방법으로 모든 문자가 짝수 갯수로 나타나도록 할 수 있다
  2. 해당 문자가 하나를 초과하는 경우

    • 불가능하다!

Code

from collections import Counter
from functools import cmp_to_key


# 짝수 개수만을 가진 딕셔너리(튜플)을 정렬합니다
def dict_sort(x1, x2):
	# 첫 인덱스의 값은 문자이므로 해당 값을 기준으로 정렬합니다
    if x1[0] > x2[0]:
        return 1
    else:
        return -1


src = Counter(list(input()))
middle = ''
middle_key = 0
possible_counter = 0
for key, value in src.items():
	# 홀수 개수 출현 문자를 검사합니다
    if value % 2 != 0:
        middle = key
        middle_key = value
        src[key] -= 1
        possible_counter += 1
# 홀수 개수 출현 문자의 개수가 하나를 초과한다면 팰린드롬이 불가합니다
if possible_counter > 1:
    print('I\'m Sorry Hansoo')
else:
    src = sorted(src.items(), key=cmp_to_key(dict_sort))
    answer = ''
    for key, value in src:
        if value % 2 == 0:
            answer += key * (value // 2)
    answer = answer + middle + answer[::-1]
    print(answer)
profile
개굴개굴 곰개굴
post-custom-banner

0개의 댓글