백준 알고리즘 저지 1334번 다음 팰린드롬

김선모·2024년 3월 1일

Baekjoon Online Judge

목록 보기
23/31
post-thumbnail

문제


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

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

입력


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

출력


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

예제 입출력

예제 입력 1 
12345
예제 출력 1 
12421

Code

문제를 4가지 케이스로 나눌 수 있다.
1) N이 1~8의 숫자
2) N이 9로만 이루어져 있는 숫자
3) N의 길이가 짝수인 숫자
4) N의 길이가 홀수인 숫자

1번째 케이스에서는 +1을 하여 출력하면 된다.
2번째 케이스에서도 +2를 하여 출력하면 된다.
3번째 케이스에서는 문자열을 나눠 앞의 문자를 A라고 하고 A를 뒤집은걸 A'라고 한다면 A + A'를 출력하면 된다. 만약 A+A'이 N보다 작다면 A +=1 하여 A + A'를 출력하면 된다.
4번째 케이스에서는 가운데에 있는 문자를 B, 앞에 있는 문자를 A라고 할 때 A + B + A'를 출력하면 된다. 만약 A + B + A'이 N보다 작다면 A + (B+1) + A'를 출력하면 된다. (자리올림 처리도 해야됨)

N = input()
intN = int(N)
lenN = len(N)
if intN <= 8 :
    r = intN + 1
elif N.count("9") == lenN :
    r = intN + 2
elif lenN % 2 == 0 :
    r = N[:lenN//2] + N[:lenN//2][::-1]
    while int(r) <= intN :
        r = str(int(N[:lenN//2])+1) + str(int(N[:lenN//2])+1)[::-1]
else :
    a = N[:lenN//2]
    b = N[lenN//2:lenN//2+1]
    r = a + b + a[::-1]
    while int(r) <= intN :
        b = str(int(b) + 1)
        if int(b) >= 10 :
            b = '0'
            a = str(int(a) + 1)
        r = a + b + a[::-1]
print(r)

0개의 댓글