음이 아닌 정수 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— 추출한 자릿수를 역순으로 쌓아 올립니다.
반복이 끝난 후
a와c가 같으면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