Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 문자열 변환 없이 정수가 회문인지 확인하는 프로그램

음이 아닌 정수 num이 주어졌을 때, 이 숫자가 회문(palindrome)인지 아닌지 판별하는 문제입니다. 여기서 회문이란 앞에서부터 읽으나 뒤에서부터 읽으나 같은 숫자를 의미합니다. 단, 이 문제는 문자열로 변환하지 않고 오직 산술 연산만으로 풀어야 한다는 조건이 있습니다.

예를 들어 입력값이 num = 25352라면, 이 숫자는 뒤집어도 25352 그대로이므로 출력 결과는 True가 됩니다.

문제 해결 접근 방법

핵심 아이디어는 나눗셈 연산으로 숫자의 각 자릿수를 추출하여 역순으로 재조립한 뒤, 원래 숫자와 비교하는 것입니다. 다음 단계를 따릅니다.

  • a를 0으로 초기화합니다.

  • c에 원래 값 num을 저장해 둡니다.

  • num이 0보다 큰 동안 다음 과정을 반복합니다.

    • r := num mod 10 — 현재 숫자의 마지막 자릿수를 추출합니다.

    • num := floor of num / 10 — 마지막 자릿수를 제거합니다.

    • a := (10 * a) + r — 추출한 자릿수를 역순으로 쌓아 올립니다.

  • 반복이 끝난 후 ac가 같으면 True를 반환하고, 그렇지 않으면 False를 반환합니다.

구현 예제

아래의 파이썬 구현을 통해 더 잘 이해할 수 있습니다.

def solve(num):
   a = 0
   c = num
   while num > 0:
      r = num % 10
      num = num // 10
      a = (10 * a) + r
   if a == c:
      return True
   else:
      return False

num = 25352
print(solve(num))

입력

25352

출력

True