문제
1213번: 팰린드롬 만들기
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
www.acmicpc.net
알고리즘
- 사전 순으로 정렬하기 위해 오름차순으로 정렬한다. (정렬을 수행할 때 시간이 좀 걸리는 것 같다.)
- Counter 함수와 반복문을 통해 문자의 개수를 확인한다.
- 문자의 개수가 홀수개인 것이 2개 이상일 경우에 팰린드롬으로 바꾸지 못한다.
- 홀수의 문자는 center에 넣고 word에서는 제거해준다.
- 홀수의 개수가 1 이하일 경우에는 팰린드롬으로 바꿀 수 있으므로 바꿔준다.
- 반복문을 통해 팰린드롬을 반으로 나눴을 때에 왼쪽 부분을 res에 더해준다.
- res + center + res[::-1]을 출력하여 팰린드롬을 완성시킨다.
코드
import sys
from collections import Counter
word = list(map(str, sys.stdin.readline().strip()))
word.sort() # 사전순으로 정렬하기 위해 오름차순 정렬
check = Counter(word) # 홀수의 개수를 확인하기 위해 Counter 함수 사용
cnt = 0 # 홀수의 개수
center = "" # 홀수의 문자
# 반복문을 통해 각 문자의 개수를 확인
for i in check:
# 문자의 개수가 홀수일 경우
# 홀수의 개수를 카운트하고 홀수의 문자를 더해준다.
if check[i] % 2 != 0:
cnt += 1
center += i
word.remove(i) # 홀수의 문자 하나를 문자열에서 제거
# 홀수의 개수가 1보다 클 경우 팰린드롬으로 바꾸지 못한다.
if cnt > 1:
break
# 홀수의 개수가 1보다 클 경우 팰린드롬으로 바꾸지 못한다.
if cnt > 1:
print("I'm Sorry Hansoo")
# 홀수의 개수가 1 이하일 경우에는 팰린드롬으로 바꿀 수 있다.
else:
res = ""
# 반복문을 통해 팰린드롬을 반을 나누었을 때 왼쪽 부분을 더해준다.
for i in range(0, len(word), 2):
res += word[i]
# 왼쪽 + 가운데(홀수) + 오른쪽
print(res + center + res[::-1])
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 1120번(파이썬): 문자열 (0) | 2021.12.30 |
---|---|
[baekjoon] 백준 2857번(파이썬): FBI (0) | 2021.12.29 |
[baekjoon] 백준 5525번(파이썬): IOIOI (0) | 2021.12.27 |
[baekjoon] 백준 1357번(파이썬): 뒤집힌 덧셈 (0) | 2021.12.26 |
[baekjoon] 백준 10610번(파이썬): 30 (0) | 2021.12.25 |