목차
문제 개요
난이도 - MEDIUM 사용 언어 - C++
정수 123이 주어진다면 321로, -123이 주어진다면 -321, 1200이 주어진다면 21로 변환하는 문제입니다.
문제 - LeetCode 7. Reverse Integer
풀이
Solution
while (x != 0)
{
if (result > (INT_MAX / 10)) return 0;
else if (result < (INT_MIN / 10)) return 0;
result *= 10;
result += (x % 10);
x /= 10;
}
단순히 입력값 x를 10으로 나눈 나머지를 result에 더하고, 다음 순회 시 result에 10을 곱하는 방식으로 변환했습니다.
입력값은 int 타입, 즉 32bit 크기의 자료형이므로, 뒤집은 값이 int 자료형의 범위를 넘을 경우 0을 반환하는 예외 처리를 수행합니다.
이번 문제에서는 INT_MAX 값을 이용해 int 타입의 범위를 검사했지만, long과 같이 int 타입보다 더 큰 자료형을 이용한다면 별도의 예외 처리가 필요하지 않습니다.
제출 결과

실행 결과 0ms가 나왔으며, 다른 C++ 제출자에 비해 100% 좋은 성능을 보임을 확인할 수 있습니다.
코드 전문
#include <cmath>
#include <climits>
class Solution
{
public:
int reverse(int x)
{
if (x == 0) return x;
int result = 0;
while (x != 0)
{
if (result > (INT_MAX / 10)) return 0;
else if (result < (INT_MIN / 10)) return 0;
result *= 10;
result += (x % 10);
x /= 10;
}
return result;
}
};