728x90
https://www.acmicpc.net/problem/1213
1213번: 팰린드롬 만들기
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
www.acmicpc.net
주어진 문자열을 가지고 팰린드롬, 즉 '회문'을 만드는 것이다. 회문은 수박이박수, 다시합창합시다 같이 앞으로 읽어도 거꾸로 읽어도 똑같은 문자열이다.
이러한 회문을 만들기 위해서 홀수개의 알파벳은 0~1개여야만 하다. 일단 각 알파벳을 key로 하고, 알파벳의 개수를 value로 하는 딕셔너리를 만들어준다.
palindrome 함수를 이용하여 딕셔너리의 key, value를 꺼내서 value가 홀수인 알파벳 하나를 check에 담고 알파벳 개수의 절반을 answer_list에 담아준다. palindrome은 가운데를 기준으로 글자수가 똑같기 때문이다. 만약, check가 True라면 홀수개의 알파벳이 여러 개라는 뜻이므로 I'm Sorry Hansoo를 리턴한다. 짝수 개의 알파벳 또한 개수의 절반만 answer_list에 담는다.
사전순으로 앞서는 것을 출력하므로 answer_list를 정렬하고 answer_list를 join한 문자열 + check 문자열 (check가 없을 경우는 그냥 '' 이므로 답에 영향을 끼치지 않는다.) + answer_list를 뒤집은뒤 join한 문자열을 return 해주면 된다.
def palindrome():
check = ''
answer_list = []
for k, v in munza.items():
if v % 2:
if check:
return 'I\'m Sorry Hansoo'
check = k
for _ in range(v//2):
answer_list.append(k)
else:
for _ in range(v//2):
answer_list.append(k)
answer_list.sort()
return ''.join(answer_list) + check + ''.join(answer_list[::-1])
munza = {}
for char in input():
if char in munza.keys():
munza[char] += 1
else:
munza[char] = 1
print(palindrome())
'알고리즘' 카테고리의 다른 글
[SWEA] 2105. 디저트 카페 (0) | 2021.10.12 |
---|---|
[백준] 21610. 마법사 상어와 비바라기 (0) | 2021.10.11 |
[백준] 16235. 나무 재테크 (0) | 2021.10.07 |
[백준] 21609. 상어 중학교 (0) | 2021.10.05 |
[백준] 21608. 상어 초등학교 (0) | 2021.10.05 |