반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

1213 팰린드롬 만들기 본문

코딩 테스트(Python)/백준, 프로그래머스

1213 팰린드롬 만들기

5_hyun 2022. 6. 11. 02:13

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

 

1213번: 팰린드롬 만들기

첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.

www.acmicpc.net

 

내 풀이(맞음)

x = list(input())
len_x = len(x)
x.sort()

dic = {}
for i in range(len_x):
    t = x[i]
    if t in dic:
        dic[t] += 1
    else:
        dic[t] = 1

chk = True
lst = list(dic)
answer = ""
len_chr = []
#짝수
if (len_x % 2) == 0:
    for i in dic:
        if (dic[i] % 2) == 1:
            chk = False
            break
        len_chr.append(dic[i] // 2)
    for i in range(len(len_chr)):
        answer += lst[i] * len_chr[i]
    for i in range(len(len_chr)-1, -1, -1):
        answer += lst[i] * len_chr[i]
#홀수
else:
    odd = ""
    for i in dic:
        if (dic[i] % 2) == 1:
            odd += i
            dic[i] -= 1
            if len(odd) > 1:
                chk = False
                break
        len_chr.append(dic[i] // 2)
        
    for i in range(len(len_chr)):
        answer += lst[i] * len_chr[i]
    answer += odd
    for i in range(len(len_chr)-1, -1, -1):
        answer += lst[i] * len_chr[i]

if chk:
    print(answer)
else:
    print("I'm Sorry Hansoo")

우선 정답이 여러 개이면 사전 순서대로 출력해서 정렬을 한다. 그리고 딕셔너리를 이용해서 각 문자가 몇 개씩 있는지 정리했다. chk를 통해 조건을 확인하고 lst에는 딕셔너리에 있는 문자를 리스트화 했고 answer에 정답을 저장, len_chr은 각 문자의 수를 2로 나눈 값이 저장된다.

짝수 개가 입력되었을 때, 만약 문자 중에 홀수 개인 것이 존재하면 chk를 False로 바꿔주고 멈춘다. 모두 정상적으로 짝수 개가 있으면 앞에 절반은 순서대로 붙이고 뒤에 절반은 역순으로 붙인다.

홀수 개가 입력되었을 때, 홀수 개인 것이 1개만 존재해야 한다. 홀수인 것이 생기면 odd에 그 문자를 저장하고  odd의 숫자는 2개 이상이 되면 안된다. 그래서 홀수 개인 것이 1개 초과하면 chk를 False로 바꾸고 멈춘다. 마찬가지로 앞에 절반은 순서대로 붙인다. 그리고 홀수 개 였던 문자를 하나 중간에 삽입하고 나머지 절반을 역순으로 붙여준다.

그 후에 조건에 맞춰서 출력해주면 된다.

 

처음에 정렬을 하지 않아서 틀렸었다. 그리고 코드가 깔끔하진 않아서 좀 더 깔끔하게 정리하고 푸는 방법을 연습해야 한다고 생각했다.

728x90
반응형

'코딩 테스트(Python) > 백준, 프로그래머스' 카테고리의 다른 글

2805 나무 자르기  (0) 2022.06.17
1316 그룹 단어 체커  (0) 2022.06.13
1181단어 정렬  (0) 2022.06.10
1157 단어 공부  (0) 2022.06.09
14425 문자열 집합  (0) 2022.06.08
Comments