https://www.acmicpc.net/problem/1213
풀이
문제풀이에 앞서 collections 라이브러리에서 Counter 메서드를 사용하였습니다.
Counter 메서드는 문자열에 포함된 문자들의 개수를 딕셔너리 형태로 뽑아주는 메서드입니다.
아래는 Counter 메서드의 사용해본 결과입니다.
from collections import Counter
word = "hi my name"
s = Counter(word)
s
>>> Counter({' ': 2, 'm': 2, 'h': 1, 'i': 1, 'y': 1, 'n': 1, 'a': 1, 'e': 1})
for i in s:
print(i)
>>>
h
i
m
y
n
a
e
문자열에 포함된 문자의 개수를 정확하게 파악을 해야 입력으로 주어지는 문자열이 팰린드롬이 가능한지 알 수 있습니다.
가장 중요한 점은 문자열에 포함된 특정 문자의 개수가 홀수인 문자가 2개 이상이면 안된다는 것입니다.
a가 3개이고 b가 3개인 문자 "ababab"가 주어진다면 팰린드롬이 가능할까요? 불가능합니다.
그렇지만 a가 3개이고 b가 2개인 문자 "abbaa"가 주어진다면 "ababa"로 팰린드롬할 수 있습니다.
이제 중요한 점을 파악했으니 코드를 보겠습니다.
# 1213번 팰린드롬 만들기
import sys
from collections import Counter
word = list(input())
# 사전순으로 팰린드롬한 문자열을 출력하기 위해 미리 사전순으로 배열
word.sort()
# 문자열에 포함된 문자의 개수를 딕셔너리로 표현해주는 Counter 메서드
word_info = Counter(word)
# 팰린드롬이 가능한지 계산하는 함수
def is_it_Possible(word):
# 문자열에 포함된 문자의 개수가 홀수인 문자의 개수
cnt = 0
# 개수가 홀수라서 출력될 문자열의 가운데를 차지할 문자
middle = ""
# 출력될 문자열의 왼쪽
ans = ""
for i in word_info:
if word_info[i] % 2 != 0:
cnt += 1
middle += i
# 문자의 개수의 반만큼 ans에 추가해준다.
ans += i * (word_info[i] // 2)
# 홀수의 개수를 가지는 문자가 1개 이상이면 팰린드롬이 불가능하다.
if cnt > 1:
# 팰린드롬 불가능
return "I'm Sorry Hansoo"
# 팰린드롬이 정상적으로 가능할 경우 답을 출력
return ans + middle + ans[::-1]
print(is_it_Possible(word))
출력결과
'백준 > 구현' 카테고리의 다른 글
[백준][Python] 10797번 10부제 - 코팩 (0) | 2022.09.20 |
---|---|
[백준][Python] 25305번 커트라인 - 코팩 (0) | 2022.09.14 |
[백준][Python] 3062번 수 뒤집기 - 코팩 (0) | 2022.09.05 |
[백준][Python] 10820번 문자열 분석 - 코팩 (0) | 2022.09.03 |
[백준] 13211번 Passport Checking - 파이썬 (0) | 2022.08.30 |