본문 바로가기
Develop/알고리즘

[백준/Python] Gold V #1334 다음 팰린드롬 수

by favorcat 2023. 6. 11.
반응형
 

1334번: 다음 팰린드롬 수

팰린드롬 수는 앞으로 읽어도, 뒤로 읽어도 같은 숫자이다. 101, 4, 6666와 같은 숫자는 팰린드롬 수이고, 10, 564, 15452와 같은 숫자는 아니다. 어떤 수 N이 주어질 때, N보다 큰 팰린드롬 수 중에서 가

www.acmicpc.net

문제

팰린드롬 수는 앞으로 읽어도, 뒤로 읽어도 같은 숫자이다. 101, 4, 6666와 같은 숫자는 팰린드롬 수이고, 10, 564, 15452와 같은 숫자는 아니다.

어떤 수 N이 주어질 때, N보다 큰 팰린드롬 수 중에서 가장 작은 수를 출력한다.

입력

첫째 줄에 N이 주어진다. N은 최대 50자리인 양의 정수이다. 첫 숫자는 0이 아니다.

출력

첫째 줄에 문제의 정답을 출력한다.

풀이

n = input()
l = len(n)

if l == 1: # 1의자리 수
  n = int(n)
  if n == 9:
    print(11)
  else:
    print(n+1)

elif l & 1: # 홀수 자리 수
  a = int(n[:l//2][::-1]) # 앞자리
  b = int(n[l//2+1:]) # 뒷자리
  if a > b:
    print(n[:l//2]+n[l//2]+n[:l//2][::-1])
  else:
    if int(n[l//2]) == 9:
      c = str(int(n[:l//2])+1)
      if len(c) == len(n[:l//2]): print(c + "0" + c[::-1])
      elif len(c) > len(n[:l//2]): print(c + c[::-1])
    else:
      print(n[:l//2] + str(int(n[l//2]) + 1) + n[:l//2][::-1])

else: # 짝수 자리 수
  a = int(n[:l//2][::-1])
  b = int(n[l//2:])
  if a > b:
    print(n[:l//2]+n[:l//2][::-1])
  else:
    c = str(int(n[:l//2])+1)
    if len(c) == len(n[:l//2]):
      print(c + c[::-1])
    elif len(c) > len(n[:l//2]):
      print(c + c[::-1][1:])
반응형

Comment