본문 바로가기
SW/알고리즘 문제풀이

[leetcode] Reverse Integer

by 미래미래로 2021. 3. 4.
728x90

Problem

Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

 

Example 1:

Input: x = 123

Output: 321


Example 2:

Input: x = -123

Output: -321

 

Example 3:

Input: x = 120

Output: 21

 

Example 4:

Input: x = 0

Output: 0

 

Constraints:

  • -231 <= x <= 231 - 1

How to solve

정수 x를 거꾸로 출력하는 문제이다. 

정수 x의 부호를 저장해 놓고, 절대 값을 씌운 정수의 마지막 숫자부터 reversing한다. 

 

1. 결과 값을 담을 변수 선언

  long long int res = 0;

 

2. input 정수 x의 부호를 저장
   int minus_flag = (x>0 ? 1 : -1);

 

3. 정수 x 의 절대값을 저장
  long long int abs_x = abs(x);

 

4. abs_x 이 >0 보다 큰 경우 while문을 돌면서, reversing 한다. 

   1) abs_x%10 은 abs_x의 맨 뒷자리를 가져온다. 

      즉, 321%10 = 1 이다. 

   2) res*10 후 1)에서 구한 abs_x의 맨 뒷자리를 더해준다. 

       res = res*10 + num;

     

Solution(c++)

#include <bits/stdc++.h>

class Solution {
public:
    int reverse(int x) {
        
        long long int res = 0;
        int minus_flag = (x>0 ? 1 : -1);
        int abs_x = abs(x);
        while( abs_x > 0 ){
            long long int num = abs_x%10;
            abs_x /= 10;
            res = res*10 + num;
            if(res > INT_MAX){
                return 0;
            }
        }
        res *= minus_flag;
        return res;
    }
};

Test Result

 

728x90

댓글