알고리즘 공부/파이썬(Python)

백준 1213번 팰린드롬 만들기 파이썬

마달랭 2024. 7. 12. 01:16
반응형

리뷰

분명 더 최적화 하는 방법이 있겠지만... 노가다로 푼 것 같다.

 

문제 풀이

  1. 알파벳 대문자를 딕셔너리로 초기화 해준 뒤 문자열을 참조하여 각 알파벳 개수를 최신화 해준다.
  2. 딕셔너리의 value를 돌고 홀수인 값이 2개 이상일 경우를 체크해준다.
  3. 정답을 출력할 빈 문자열을 초기화 해주고 딕셔너리 value의 반만큼만 문자열을 더해준다.
  4. 이번엔 딕셔너리를 뒤집어서 남은 value만큼 문자열을 더해준다.
  5. 홀수가 있었을 경우 문자열의 가운데에 홀수 알파벳을 넣어준다, 문자열 출력

 

참고 사항

  1. 홀수가 두개 이상인 경우 팰린드롬을 만들 수 없다. 쏘리 한수
  2. 딕셔너리를 for문으로 초기화 했다면 굳이 정렬을 하지 않아도 자동으로 된다.
  3. 최종 문자열에 value를 더해줄때는 2로 나눈 몫만큼 추가해 줘야한다. (홀수 문자열 추가 방지)

 

정답 코드

# 백준 1213번 팰린드롬 만들기 파이썬
s = input()
dic = {chr(i): 0 for i in range(65, 91)}
for char in s:
    dic[char] += 1
cnt = 0
hol = ''
for key, val in dic.items():
    if val % 2:
        cnt += 1
        hol = key
if cnt >= 2:
    print("I'm Sorry Hansoo")
else:
    ans = ''
    for key, val in dic.items():
        if val >= 2:
            ans += key * (val // 2)
    for key, val in reversed(dic.items()):
        ans += key * (val // 2)
    if hol:
        middle = len(ans) // 2
        ans = ans[:middle] + hol + ans[middle:]
    print(ans)

 

 

728x90
반응형