https://www.acmicpc.net/problem/1213
문제풀이
import sys
from collections import Counter
input=sys.stdin.readline
name=list(input().strip())
name.sort()
count=Counter(name)
odd=0
target_odd=''
ans=''
for i in count:
if count[i]%2 != 0:
odd +=1
target_odd+=i
for _ in range(count[i]//2):
ans+=i
if odd>1:
print("I'm Sorry Hansoo")
elif odd==0:
print(ans+ans[::-1])
else:
print(ans+target_odd+ans[::-1])
정리
collections 모델의 Counter 클래스를 사용
sort()를 사용하여 정답이 여러 개인 경우를 대비해 알파벳을 사전 순으로 바꿔준다.
Counter는 인자로 받은 내용의 각 원소들이 몇 번씩 나오는지 구해준다.
팰린드롬은 알파벳의 횟수가 홀수인 것이 2개 이상 있을 경우 팰린드롬을 만들 수 없기 때문에 예외처리를 위한 odd 변수를 만들어준다.
ex) AAAABC - 불가능
그리고 개수가 홀수인 알파벳을 가운데에 넣어줘야 하기 때문에 해당 알파벳을 따로 저장한다.
문자열을 만들어 나가기 위해서 ans 선언
입력받은 알파벳의 사전 순서대로 몇 개가 나왔는지 확인해주고 홀수가 나오는 경우 odd에 +1 그리고 타겟에 알파벳을 저장
count [i]//2를 통해서 나온 개수의 반을 ans에 더해준다.
ex) AADDBBB -> //2로 나눠서 더하게 되면 처음에 ABD가 ans에 더해진다.
홀수가 2개 이상인 경우 예외처리
홀수가 0인 경우 아까만든 ans에 ans의 반대로 된 문자열을 더해준다.
홀수가 1개인 경우
ans + 홀수개 나온 알파벳 + ans 반대로
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] #2178 미로 탐색 (python) (0) | 2024.05.14 |
---|---|
[백준] #2578 빙고 (python) (0) | 2024.05.11 |
[백준] #17413 단어 뒤집기2 (python) (0) | 2024.04.30 |
[백준] #18111 마인크래프트 (python) (0) | 2024.04.29 |
[백준] #2108 통계학 (python) (0) | 2024.04.27 |