알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 팰린드롬 만들기(1213)

HRuler 2023. 2. 1. 22:35

1. 문제

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

 

1213번: 팰린드롬 만들기

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

www.acmicpc.net

2. 풀이

import sys
input = sys.stdin.readline

# n_str : 이름 문자열
n_str = input()
# a_l : 이름의 알파벳별 개수를 세서 저장할 리스트
a_l = [0 for i in range(50)]
# o_num : 알파벳들 중 홀수 알파벳의 개수
o_num = 0
# print(a_l)
for i in range(50):
    a_cnt = n_str.count(chr(i+65))
    a_l[i] = a_cnt
    if a_cnt % 2 == 1:
        o_num += 1
result = ""
if o_num >= 2:
    result = "I'm Sorry Hansoo"
else:
    for i, v in enumerate(a_l):
        if v % 2 == 0:
#             print(chr(i+65) * v)
            r_len = len(result) // 2
            result = result[:r_len] + (chr(i+65) * v) + result[r_len:]
        elif v % 2 == 1:
            r_len = len(result) // 2
            result = result[:r_len] + (chr(i+65) * (v-1)) + result[r_len:]
    for i, v in enumerate(a_l):
        if v % 2 == 1:
            r_len = len(result) // 2
            result = result[:r_len] + (chr(i+65) * 1) + result[r_len:]
print(result)

3. 후기

 - 이번 문제는 팰린드롬 알고리즘을 구현하는 것이 주요 컨셉이다.

 문제의 조건 중 사전순으로 앞서는 것으로 출력하는 것이 있기 때문에 짝수개의 알파벳은 순서대로 결과 문자열 중간에 추가해주고 홀수개의 알파벳은 총 개수 중 1개만 남기고 문자열 중간에 추가해준 후 마지막에 문자열 정가운데에 1개를 추가로 추가해주었다.

 만약 홀수 알파벳이 여러개인 경우 예외로 출력하여 해결하였다.