-
1213. 팰린드롬 만들기Algorithm/Baekjoon 2023. 2. 7. 00:41
이것도 깔끔하게 풀겠다고 정답화면을 서너번은 봤다...
의식의 흐름대로 푼 초기 버전
import sys input = sys.stdin.readline def palindrome(arr) : alphabets = {} half = [] center = [] result = [] for c in arr : if c in alphabets : alphabets[c] += 1 else : alphabets[c] = 1 alphabets = sorted(alphabets.items()) for c, cnt in alphabets : if cnt%2 == 0 : half.extend([c]*(cnt//2)) elif cnt%2 != 0 and center : print("I'm Sorry Hansoo") return elif cnt==1 : center.append(c) elif cnt%2 != 0 and cnt > 1 : center.append(c) half.extend([c]*(cnt//2)) result = half + center + half[::-1] print(''.join(result)) arr = input().rstrip() palindrome(arr)
진짜 생각하는 그대로 풀었다.
그래서 코드가 많이 더럽게 느껴짐... 조건도 저렇게 많이 쓸 필요가 없다. 어차피 중간에 들어갈 알파벳이 이미 있으면 "I'm Sorry Hansoo"를 출력하고, 그게 아니면 중간 알파벳을 넣는 차이만 있을 뿐 어차피 개수의 반절을 리스트에 넣는 건 똑같기 때문이다. 또한, 불필요할지도 모르지만 알파벳 개수를 처리해줄 때 요령을 좀 피워보았다.
import sys input = sys.stdin.readline def count_alphabet(text) : count = [0] * 26 for c in text : count[ord(c)-65] += 1 return count def make_palindrome(count) : palindrome = [] center = [] for i in range(len(count)) : if count[i] %2 != 0 : if center : return "I'm Sorry Hansoo" center.append(chr(i+65)) palindrome.extend([chr(i+65)]*(count[i]//2)) return ("".join(palindrome+center+palindrome[::-1])) arr = input().rstrip() count = count_alphabet(arr) print(make_palindrome(count))
많이 깔끔해졌다고 생각하는데 아닐 수도 있다. ㅋㅋ
'Algorithm > Baekjoon' 카테고리의 다른 글
2504. 괄호의 값 (0) 2023.02.08 1918. 후위표기식 (0) 2023.02.07 4949. 균형잡힌 세상 (0) 2023.02.06 9375. 패션왕 신해빈 (0) 2023.02.06 19583. 싸이버개강총회 (0) 2023.02.05