반응형
코드
from collections import Counter
name = list(map(str,input()))
name.sort()
count = Counter(name)
odd = 0
odd_alpha = ''
ans = ''
for i in count:
if count[i] % 2 != 0:
odd += 1
odd_alpha += 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 + odd_alpha + ans[::-1])
설명
파이썬의 collections 모듈의 Counter에 대해 최근에 알게 되어서 사용해봤다.
Counter(name)을 count에 담은 값을 출력해보면 아래와 같이 저장되는 것을 볼 수 있다.
Counter({'B': 3, 'A': 2})
문자의 개수가 홀수개인 것이 2개 이상 존재할 경우 팰린드롬을 만들 수 없다.
따라서 for문에서 각 문자의 개수를 확인하고 홀수인 경우 odd를 증가시킨다. odd_alpha에는 해당 문자를 저장해둔다. 마지막에 정답의 가운데에 이 문자를 추가해줘야 하기 때문이다.
그리고 (문자 개수 // 2) 번 만큼 해당 문자를 ans에 추가해준다.
예를 들어 AABBB의 경우 A를 1번, B를 1번 추가해서 ans = AB를 만든다.
마지막으로 odd가 0인 경우 ans + ans[::-1]을 해서 팰린드롬을 만들어주고
odd가 1인 경우 홀수개인 문자가 가운데에 와야하므로 ans + odd_alpha + ans[::-1]을 해준다.
반응형
'알고리즘 > 그리디' 카테고리의 다른 글
[백준][Python] 1049번 기타줄 (0) | 2022.11.08 |
---|---|
[백준][Python] 2012번 등수 매기기 (0) | 2022.11.03 |
[백준][Python] 수들의 합 (0) | 2022.11.01 |
[백준][Python] 1461번 도서관 (0) | 2022.10.31 |
[백준][Python] 12904번 A와 B (0) | 2022.10.28 |
댓글