본문 바로가기

카테고리 없음

백준 1334 - 팰린드롬

N = int(input()) + 1
strN = list(str(N))
isPalin = True
while True:
    for i in range(len(strN) // 2):
        isPalin = True
        if strN[i] > strN[len(strN)-i-1]:
            strN[len(strN) - i - 1] = strN[i]
        elif strN[i] < strN[len(strN)-i-1]:
            strN[len(strN) - i - 1] = strN[i]
            N = int(''.join(strN)) + 10 ** (i + 1)
            strN = list(str(N))
        
        for i in range(len(strN) // 2):
            if strN[i] != strN[len(strN)-i-1]:
                isPalin = False
                break
        if isPalin: break
    if isPalin: break
    if len(strN) % 2 == 0: strN[len(strN) // 2] = strN[len(strN) // 2 - 1]
print(int(''.join(strN)))

첫번째 자리와 마지막 자리 비교
두번째 자리와 마지막 - 1 자리 비교
이렇게 자리수 별로 다 비교해도 펠린드롬을 만족하지 못하는 경우가 있다.

그래서 while True를 넣어줬다. while True라 하면 되게 많이 돌 것 같지만 많이 돌아봐야 2번이다.

 


면접 준비하느라 오랜만에 풀었더니 난리났다. 이중 포문이면 탈출 조건 두지말고 함수로 빼서 리팩토링 하는게 훨씬 나을 것 같다.