본문 바로가기

알고리즘/백준

[BOJ] [Python] 1213번 : 팰린드롬 만들기

예외 처리를 먼저 생각해보자.

 

알파벳이 홀수인 게 2개 이상이면, 팰린드롬이 될 수 없다.

따라서 이때, I'm Sorry Hansoo"를 출력한다.

 

 

팰린드롬은 start, mid, end로 나눠서 구현할 수 있다.

 

start에는 // 2를 이용해서 현재 알파벳의 개수 나누기 2의, 몫이 들어간다.

mid에는 % 2를 이용해서 홀수 개수인 알파벳을 1개 넣어준다.

end는 start의 역순이다.

 

 

참고로 딕셔너리를 중간에 sort 해줬기 때문에,

조건 중 하나인  '사전순으로 앞서는 것을 출력'은 신경 쓰지 않아도 된다.

 

string = input()

dic = {}

for s in string:
    dic[s] = 0

for s in string:
    dic[s] += 1

count = 0
new_dic = sorted(dic)

# print(dic, new_dic)

for s in new_dic:
    if dic[s] % 2 != 0:
        count += 1

        if count > 1:
            print("I'm Sorry Hansoo")
            break

else:
    start = ''
    mid = ''
    for s in new_dic:
        start += s * (dic[s] // 2)
        mid += s * (dic[s] % 2)

    print(start, end="")
    print(mid, end="")

    end = ''.join(reversed(start))
    print(end)

 

 

처음에 "I'm Sorry Hansoo"가 아니라 "I'm Sorry Hansun"이라고 작성하는 바람에,

계속 "틀렸습니다"가 나왔다.

 

알고리즘에서 문제가 있는 줄 알고 멘붕에 빠졌었다.

 

나중에 오타가 있는 것을 발견하고, 사소한 부분을 잘 볼 것을 다짐하고 다짐했다.