Baekjoon 1213.py [펠린드롬 만들기]

hohooodo·2021년 7월 12일
0

Problem Solving

목록 보기
25/32
post-thumbnail

문제가 궁금하다면?

내 풀이

word = input().rstrip()
words = {}
result = [0 for _ in range(len(word))]
cnt = 0

# 입력받은 문자를 딕셔너리 자료형 words 에 저장
for alphabet in word:
    if alphabet in words.keys():
        words[alphabet] += 1
    else:
        words[alphabet] = 1
# 문자를 기준으로 정렬
sortedWords = sorted(words.items(), key=lambda x: x[0])

# words 딕셔너리에 홀수번 들어온 문자가 있으면 카운트 증가, 인덱스 저장
for k in range(len(sortedWords)):
    if not sortedWords[k][1] % 2 == 0:
        cnt += 1
        oddWord = sortedWords[k][0]
        sortedWords[k] = list(sortedWords[k])
        sortedWords[k][1] -= 1

# 홀수번 들어온 문자가 2개 이상이면 한수 못함
if cnt > 1:
    print("I'm Sorry Hansoo")
else:
    c = 0
    for i in range(len(sortedWords)):
        for _ in range(sortedWords[i][1]//2):
            result[c], result[-c-1] = sortedWords[i][0], sortedWords[i][0]
            c += 1
    if cnt == 1:
        result[(len(word)//2)] = oddWord
    print(''.join(map(str, result)))

풀이 복기

로직을 생각하는데 오랜시간이 걸리지는 않았다. 하지만 예외처리를 하는과정에서 몇번 실수해서 AC를 받는데 오래걸림.
입력받은 문자열을 딕셔너리에 저장 및 카운트하고, 정렬해서 result리스트에 채워주는 방식으로 풀었다.

sortedWords[k] = list(sortedWords[k])
sortedWords[k][1] -= 1

문자의 값이 홀수일때 값을 하나 뺐는데 이는 result 리스트에 왼쪽끝과 오른쪽 끝에서 값을채울때 원치 않은 값이 들어가는경우가 있을것같아 작성했음. 근데 복기를 하며 코드를 다시 보니까 없어도 될것같아 빼고 실행했더니 맞았다.

예제와 인터넷에 나와있는 반례가 전부 ide에서는 잘 작동되는데 백준에서 제출할때는 계속 에러나서 이유를 한참 찾았다.
print(''.join(map(str, result)))이 부분을 처음에는 print(''join(result))로 작성했었는데 고치니까 맞았다. 후에 검색으로 찾아봤지만 이유는 잘 모르겠다. 아는분 있으면 댓글 부탁드려요

profile
글을 잘쓰는 개발자가 되고싶습니다

0개의 댓글