BOJ - 1213

주의·2023년 11월 9일
0

boj

목록 보기
3/214

백준 문제 링크
팰린드롬 만들기

❓ 접근법

  1. 먼저, 영어 이름에 있는 알파벳의 개수를 파악해야 한다.
    그 이유는 'AABB'의 경우 A와 B가 각각 2개이므로 AB를 붙인 뒤 뒤집어서 붙여주면 'ABBA'가 되지만, 'AAABB'의 경우 A와 B가 각각 3개, 2개 이므로 이전 방법은 적용할 수 없다. ABABA로 만들기 위해서는 'AB' + 'A' + 'BA'로 구성해야 하기 때문이다.
  2. 알파벳의 개수가 홀수인 경우에 center에 그 알파벳을 넣어주고,
    odd 값을 1 증가시킨다.
  3. 이제부터 odd의 값 별로 조건문을 설정할건데,
    odd가 0인 경우는 'AABB'처럼 모든 알파벳의 개수가 짝수이므로 뒤집어서 붙여주면 된다.
    odd가 1인 경우는 'AAABB'에서 'AB' + 홀수인 알파벳 A + 'BA'로 붙여주면 된다.
    odd가 2이상인 경우는 'ABCD'처럼 팰린드롬으로 나타낼 수 없다.

👌🏻 코드

from collections import Counter
x = list(map(str , input()))
x.sort()
count = Counter(x) 
# 알파벳의 개수를 파악

odd = 0
center = ''
ans = ''

for i in count:
    if count[i] % 2 != 0 : # 개수가 홀수이면 중앙으로 보냄
        center += i
        odd += 1
        
    for _ in range(count[i] // 2):
        ans += i
        
if odd > 1:
    print("I'm Sorry Hansoo")
elif odd == 0:
    print(ans + ans[::-1])
else:
    print(ans + center + ans[::-1])

❌ 틀린 코드

x = input()
dic = {}
temp = ''
center = ''

odd = 0

for i in x:
    if i not in dic: 
        dic[i] = 1
    else:
        dic[i] += 1
        

for i in dic.items():
    if i[1] % 2 != 0:
        odd += 1
        
sort_dic = sorted(dic.items())
dic2 = {}
for i in sort_dic:
    if i[0] not in dic2:
        dic2[i[0]] = i[1]

        
if odd > 1:
    print("I'm Sorry HanSoo")
    
elif odd == 0:
    for i,j in dic2.items():
        temp += i * int(j/2)
        dic2[i] -= j
    temp = temp + temp[::-1]
else:
    for i,j in dic2.items():
        if j % 2 != 0:
            center += i
            temp += i * int(j/2)
            dic2[i] -= 1
        else:
            temp += i * int(j/2)
            dic2[i] -= j
    temp = temp + center +  temp[::-1]
    
print(temp)

# 예제와 백준에 있는 반례도 맞았지만 제출에는 실패한 코드이다. ㅠㅠ
Counter함수를 잘 활용해야겠다..

0개의 댓글