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


문제 해결을 위한 과정

이 문제의 경우 입력받은 문자열을 조합해서 팰린드롬을 만드는 문제입니다. 과정은 다음과 같습니다.

1. 입력받은 문자열의 짝수, 홀수 개수를 파악한다.(각 알파벳의 등장 횟수)

2. 전부 짝수로 이루어져 있거나 홀수의 개수가 하나라면 팰린드롬이다. (Ex. ABBA, ABBCBBA)

3. 홀수의 개수가 2개 이상이면 팰린드롬이 불가능하다. (Ex. ABBBC) 

 

또한 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다 라는 조건이 있는데 이 경우는 알파벳 리스트를 A부터 Z순으로 조회하며 팰린드롬을 생성한다면 자동적으로 사전순으로 배열됩니다.


소스코드
word = input()
arr = [0] * 26
for i in range(len(word)):
  arr[ord(word[i]) - ord('A')] += 1

flag = True
numOfOdd = 0
temp = ""
rest = ""
for i in range(len(arr)):
  if arr[i] % 2 != 0:
    numOfOdd += 1
    rest = chr(i + 65)
    for _ in range(arr[i]//2):
      temp += chr(i + 65) 
  elif arr[i] % 2 == 0:
    for _ in range(arr[i]//2):
      temp += chr(i + 65) 
temp += rest
if numOfOdd >= 2:
  flag = False
  
if flag == False:
  print("I'm Sorry Hansoo")
else:
  if numOfOdd == 0:
    for i in range(len(temp)-1, -1, -1):
      temp += temp[i]
  else:
    for i in range(len(temp)-2, -1, -1):
      temp += temp[i]
  print(temp)

+ Recent posts