Algorithm/LeetCode

[LeetCode - 7] Reverse Integer - Java

ikjo 2022. 1. 12. 17:36

문제 설명

문제

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).

 

입출력 예시

Input: x = 123
Output: 321
Input: x = -123
Output: -321
Input: x = 120
Output: 21

제한사항

  • -2^31 <= x <= 2^31 - 1

 

풀이 : Success

소스 코드

class Solution {
    public int reverse(int x) {
        String str = String.valueOf(x);
        StringBuilder sb;
        try {
            if (x < 0) {
                sb = new StringBuilder(str.substring(1));
                return -Integer.parseInt(sb.reverse().toString());
            } else {
                sb = new StringBuilder(str);
                return Integer.parseInt(sb.reverse().toString());
            }
        } catch (NumberFormatException e){
            return 0;
        }
    }
}​

 

풀이 회고

우선 입력받은 정수를 reverse를 해주기 위해 문자열로 변환해주었다. 이후 해당 문제에서는 -는 reverse 시키면 안되므로 입력받은 정수가 음수일 경우와 양수(0 포함)일 경우로 나누어 작업하도록했다.

 

만일 음수일 경우 부호를 제외한 문자열(substring)에 대해서만 reverse를 시키는데 이때 StringBulider를 사용하고 이를 정수로 변환하여 반환하도록 했다. StringBuilder의 경우 reverse 기능을 포함하고 있을 뿐만 아니라 문자열의 추가, 수정 등의 작업이 빈번하게 일어나는 경우에 성능이 좋기 때문이다.

 

양수일 경우에는 부호를 고려할 필요없으면 변환한 문자열을 reverse 후 정수로 변환하여 반환시켰다.

 

다만 reverse 작업을 하다가 정수의 크기가 int 형을 초과하는 경우가 발생할 수도 있는데, 문제에서는 이 경우 0을 반환하도록 명시했으므로 try-catch문을 통해 NumberFormatException이 발생한 경우 예외처리(0 반환)를 하도록 했다.

 

 

참고자료

  • https://leetcode.com/problems/reverse-integer/