본문 바로가기

알고리즘/LeetCode

[LeetCode] 7. Reverse Integer (Medium)

입력된 int를 반전시킨 int를 결과로 출력하는 문제입니다.

이 때, 반전시킨 int값이 integer의 범위인 [-2³¹, 2³¹-1]에 포함되지 않을 경우 0을 출력해야합니다.

 

class Solution {
public:
    int reverse(int x) {
        int maxInt = INT_MAX;
        int minInt = INT_MIN;
        
        int reverse = 0;
        vector<int> nums;
        
        if (x<0)
        {
            while(true)
            {
                if(x%10 != 0)
                {
                    nums.push_back(x%10);
                    x /= -10;
                    break;
                }
                x /= 10;
            }
        }
        else if (x == 0)
            return x;
        
        while(x)
        {
            nums.push_back(x%10);
            x /= 10;
        }
        
        reverse = nums[0];
        
        for(int i=1; i<nums.size(); i++)
        {
            if (reverse <= maxInt/10 && reverse >= minInt/10)
            {
                reverse *= 10;
            }
            else
            {
                return 0;
            }
            if (reverse <= maxInt - nums[i] && reverse >= minInt + nums[i])
            {
                if(reverse >= 0)
                    reverse += nums[i];
                else
                    reverse -= nums[i];
            }
            else
            {
                return 0;
            }       
        }
        
        return reverse;   
    }
};