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개를 추가로 추가해주었다.
만약 홀수 알파벳이 여러개인 경우 예외로 출력하여 해결하였다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 토너먼트 승자(1404) (0) | 2023.02.09 |
---|---|
(Python)백준 코딩테스트 연습 - 미로 만들기(1347) (1) | 2023.02.05 |
(Python)백준 코딩테스트 연습 - 약속(1183) (0) | 2023.01.31 |
(Python)백준 코딩테스트 연습 - 선물(1166) (0) | 2023.01.28 |
(Python)백준 코딩테스트 연습 - 게임(1072) (1) | 2023.01.26 |