ABOUT ME

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by nanometre380.