728x90
반응형
링크: https://www.acmicpc.net/problem/1213
아이디어
- 팰린드롬은 홀수개의 알파뱃이 한 개 이상 있으면 안 돼 -> 알파뱃의 개수 찾는 함수 필요
- 알파뱃과 개수를 담은 리스트를 돌며 팰린드롬 문자의 반쪽을 구현
- 개수가 짝수면 개수의 반만큼 그 알파뱃을 리스트에 추가
- 홀수면 2로 나눈 몫만큼은 리스트에 넣고 가운데 요소만 따로 저장
- 돌다가 홀수인게 두 번 나오면 바로 안된다고 선언
- 리스트가 다 만들어졌으면 그 리스트를 뒤집은 리스트도 하나 준비
- 마지막으로 만든 리스트 + 가운데 요소 + 뒤집은 요소를 해주고
- join으로 문자를 만들면 끝!
구현
import sys
input = sys.stdin.readline
# 알파벳의 갯수를 카운트
def count_word(li):
li.sort()
cnt_li = []
tmp = li[0]
cnt = 1
hol = 0
for i in range(1,len(li)):
if li[i] == tmp:
cnt += 1
else:
cnt_li.append((tmp,cnt))
tmp = li[i]
cnt = 1
cnt_li.append((tmp,cnt))
return cnt_li
li = list(input().rstrip())
cnt_li= count_word(li)
palindrome = []
hol = []
for i in cnt_li:
for _ in range(i[1]//2):
palindrome.append(i[0])
if not hol and i[1]%2 == 1:
hol.append(i[0])
elif hol and i[1]%2 == 1:
print("I'm Sorry Hansoo")
exit()
palindrome.sort()
left = palindrome
mid = hol
right = list(reversed(palindrome))
result = left + mid + right
print("".join(result))
마무리
- 간단하게 구현될 듯 했는데 생각보다 길게 나왔다.
728x90
반응형
'코테준비 > 백준' 카테고리의 다른 글
[백준] 1783번: 병든 나이트 - Python (0) | 2023.09.23 |
---|---|
[백준] 15663번: N과 M (9) -Python (0) | 2023.09.20 |
[백준] 17144번: 미세먼지 안녕! - Python (0) | 2023.09.18 |
[백준] 숨바꼭질 3 - Python (0) | 2023.09.16 |