백준문제풀이

백준 문제 1334번 다음 팰린드롬 수 문제풀이 python

노가다 김씨 2022. 3. 20. 21:15

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

 

1334번: 다음 팰린드롬 수

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

www.acmicpc.net

 

문제해석

주어진 문자열의 길이가 홀수인경우

중앙을 기준으로 자른 앞숫자를 A  앞숫자를 뒤집은 수를 A' 뒷글자를 B 뒷글자를 뒤집은 수를 B'라고하자

 

B'>=A인경우 중앙의 수를 1올려주고 중앙앞은 A 중앙뒤는 A'로 해주면 된다. 

ex) 36583인경우 B'(=38) >= A(=36) 이므로 답은 36663이된다.

 

단 중앙의 수가 9여서 1을 올려야하는 상황인데 자릿수가 달라지면 예외 처리를 해주어야한다.

9999999 인경우가 그런 예시인데 답이 9990999가 아니라 10000001가 되어야한다.

 

B'<A인경우 중앙의 수를 그대로 두고 중앙앞은 A 중앙뒤는 A'로 해주면된다. 

ex) 36553인경우 B'(=35) < A(=36) 이므로 답은 36563이된다.

 

주어진 문자열의 길이가 짝수인경우

주어진 문자열의 앞쪽반을 A 이를 뒤집은 수를 A' 뒤쪽 반을 B 이를 뒤집은 수를 B'라고하자

 

이도 마찬가지로 아래 두가지경우로 나눌 수 있다.

 

B'>=A일때 A의 일의 자리수를 1 더한 값을 C 이를 뒤집은 수를 C'로 두자 답은 CC'가된다.

ex) 362263인경우 B'(=362) >= A(=362) 이므로 C는 362+1=363가되고  답은 CC' = 363363이된다.

 

여기서도 A에 1을 더한후의 값이 C가되는데 A의 자릿수와 C의 자릿수가 다를때를 예외처리 해주어야한다.

 

 

B'<A일때 답은 AA'이다.

ex) 367563인경우 B'(=365) < A(=367) 이므로 답은 367763이된다.

 

 

코드

n=input()
if len(n)==1:
    n=int(n)
    if n==9:
        print(11)
    else:
        print(n+1)
elif len(n)&1:
    a=int(n[:len(n)//2][::-1])
    b=int(n[len(n)//2+1:])
    if a>b:
        print(n[:len(n)//2]+n[len(n)//2]+n[:len(n)//2][::-1])
    else:
        if int(n[len(n)//2])==9:
            c=str(int(n[:len(n)//2])+1)
            if len(c)==len(n[:len(n)//2]):
                print(c+"0"+c[::-1])
            elif len(c)>len(n[:len(n)//2]):
                print(c+c[::-1])
        else:
            print(n[:len(n)//2]+str(int(n[len(n)//2])+1)+n[:len(n)//2][::-1])
else:
    a=int(n[:len(n)//2][::-1])
    b=int(n[len(n)//2:])
    if a>b:
        print(n[:len(n)//2]+n[:len(n)//2][::-1])
    else:
        c=str(int(n[:len(n)//2])+1)
        if len(c)==len(n[:len(n)//2]):
            print(c+c[::-1])
        elif len(c)>len(n[:len(n)//2]):
            print(c+c[::-1][1:])