본문 바로가기
알고리즘/그리디

[백준][Python] 1213번 팰린드롬 만들기

by 임짠짠 2023. 1. 20.
반응형
 

1213번: 팰린드롬 만들기

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

www.acmicpc.net

 

코드

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

댓글