코딩테스트/Python

[Beakjoon] 1213. 펠린드롬 만들기

swwho 2025. 1. 2. 11:52
728x90
반응형

🔗 Problem Link

https://www.acmicpc.net/problem/1213


❔Thinking

  • 주어진 문자열을 사전순으로 앞서는 '펠린드롬' 문자열을 만들어 반환한다.
  • 똑바로해도, 거꾸로해도 같아야 하기 때문에, 배열 세개로 해결한다. (left, mid, right)
  • 만약 가운데 오는 문자열이 2개 이상일 경우, 펠린드롬 문자열을 만들 수 없다. (ex - AAABBB)

💻Solution

name = list(input())
name.sort()
char_set = set()
left, mid, right = [], [], []
for char in name:
    if char not in char_set:
        char_set.add(char)
        tmp = name.count(char)
        if tmp == 1:
            mid.append(char)
            continue
        if tmp % 2 != 0:
            tmp -= 1
            mid.append(char)
        left.append(char * (tmp//2))
        right.append(char * (tmp//2))

if len(mid) >=2:
    print("I'm Sorry Hansoo")
else:
    print(''.join([*left, *mid, *right[::-1]]))

🗝️keypoint

  1. 펠린드롬 문자열이 가능한지 확인하고, 각 경우에 따른 출력을 정확하게 확인하여 코드를 작성한다. (ex - 대문자 여부)
  2. 여러개의 펠린드롬 문자열이 가능할 경우 사전순을 따져야 하기 때문에, 사전순으로 정렬하여 문자열을 확인하면 곧바로 해결할 수 있다.
  3. 배열에 담긴 문자열을 꺼내어 하나의 문자열로 만드는 방법에는 여러가지가 있다 (*, join, for문 등)