코딩테스트
[백준] 1213 팰린드롬 만들기 - Python
CuckooBird
2023. 2. 15. 21:42
백준 실버3 1213 팰린드롬 만들기 - Python
https://www.acmicpc.net/problem/1213
1213번: 팰린드롬 만들기
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
www.acmicpc.net
문제
코드
맞았습니다가 뜬 코드입니다. - 메모리 31388KB | 시간 44ms | 코드 길이 840B
import sys
input = sys.stdin.readline
word = list(input().rstrip())
word.sort()
dic = dict()
ansR = list()
ansL = list()
for w in word:
if w not in dic:
dic[w] = 1
else:
dic[w] += 1
cnt = 0
for k in dic.keys():
if dic[k] % 2 == 1:
odd = k
cnt += 1 # 홀수 개인 문자가 2개 이상일 경우에 쏘리
if cnt >= 2:
print("I'm Sorry Hansoo")
exit(0)
m = len(word)
if m % 2 == 0: # 문자열 개수가 짝수개일때
for k in dic.keys():
n = dic[k] // 2
for j in range(n):
ansL.append(k)
ansR = list(reversed(ansL))
else: # 문자열 개수가 홀수개일때
for k in dic.keys():
n = dic[k] // 2
for j in range(n):
ansL.append(k)
ansR = list(reversed(ansL))
ansL += odd
print(''.join(ansL+ansR))
정렬을 마친 뒤에 리스트를 왼쪽 오른쪽으로 나눠서 왼쪽 먼저 채운다음, 오른쪽 리스트는 왼쪽을 뒤집었습니다.
만약 홀수일경우에는 odd에 저장해두었던 홀수개 문자를 가져와 ansL에 붙여줍니다.
Try1.
틀렸습니다가 뜬 코드입니다. - 코드 길이 1064B
import sys
input = sys.stdin.readline
word = list(input().rstrip())
word.sort()
print(word)
dic = dict()
ansR = list()
ansL = list()
for w in word:
if w not in dic:
dic[w] = 1
else:
dic[w] += 1
cnt = 0
for k in dic.keys():
if dic[k] % 2 == 1:
cnt += 1 # cnt는 문자의 개수가 홀수인 경우를 셈 (2이상일때 sorry)
n = len(word)
if n % 2 == 0: # 문자열 개수가 짝수개일때
if cnt >= 1:
print("I'm Sorry Hansoo")
exit(0)
else:
for k in dic.keys():
n = dic[k] // 2
for j in range(n):
ansL.append(k)
ansR = list(reversed(ansL))
ansL.pop()
else: # 문자열 개수가 홀수개일때
if cnt > 1:
print("I'm Sorry Hansoo")
exit(0)
else:
for k in dic.keys():
if dic[k] % 2 == 1:
ansL.append(k)
n = dic[k] // 2
for j in range(n):
ansL.append(k)
ansR = list(reversed(ansL))
ansL.pop()
print(''.join(ansL+ansR))
- 왜 틀렸는지는 아직 모르겠지만, 중복되는 케이스가 좀 있는 코드입니다.
후기
전에 이 문제를 과제로 내려고 했었는데..
딱 봐도 제가 싫어하는 문자열이 있길래 패스했었습니다..
그런데..
김방구뽕뽕이가.. 내버서.. 어쩔수없이.. 해버렸습니다..
덕분에 뇌 주름이 한 줄 더 생겼습니다... 👍