Algorithm/LeetCode

[LeetCode - 9] Palindrome Number- Java

ikjo 2022. 1. 12. 18:43

문제 설명

문제

Given an integer x, return true if x is palindrome integer.

An integer is a palindrome when it reads the same backward as forward.

  • For example, 121 is a palindrome while 123 is not.

 

입출력 예시

Input: x = 121
Output: true
Explanation: 121 reads as 121 from left to right and from right to left.
Input: x = -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
Input: x = 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.

 

제한사항

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

 

풀이 : Success

소스 코드

class Solution {
    public boolean isPalindrome(int x) {
        StringBuilder sb;
        if (x >= 0) {
            sb = new StringBuilder(String.valueOf(x));
            if (x == Long.parseLong(sb.reverse().toString())) {
                return true;
            }
        }
        return false;
    }
}

 

풀이 회고

우선 입력받은 정수가 양수(0 포함)인 경우에 대해서만 작업을 처리하도록 했다. 왜냐하면 음수인 경우는 Palindrome Number가 될 수 없기 때문이다.

 

양수인 경우 입력받은 정수를 문자열로 변환해준 후 이를 인자로 두어 StringBuilder 객체를 생성했다. 이후 reverse 및 정수(Long)로 변환한 값을 입력받은 정수를 비교하여 같으면 Palindrome Number이므로 true를 반환하도록 했다.

 

이때 int가 아닌 long으로 변환한 이유는 reverse 작업으로 인해 int 자료형의 범위를 넘을 수도 있기 때문이다.

 

모범 소스코드

class Solution {
    public boolean isPalindrome(int x) {
        if(x<0){
            return false;
        }
        else{
            int tmp = x;
            int res=0;
            while(tmp>0){
                int t = tmp%10;
                res = res*10+t;
                tmp = tmp/10;
            }
            return res==x;
        }
    }
}​

 

코드 분석

위 풀이는 리트코드 내 수많은 모범 답안 중 하나이다.

 

해당 풀이에서는 문자열로 변환하지 않고 정수만을 이용하여 reverse를 한 것과 같은 결과를 출력하고있다.

 

이 풀이에서도 마찬가지로 양수인 경우에 대해서만 작업을 처리했다. 우선 입력받은 정수를 별도 tmp 변수에 저장시켰으며 reverse된 정수를 저장하기 위해 res 변수를 초기화시켜주었다.

 

이후 입력받은 정수 값(tmp)가 0을 초과하는 경우 특정 작업을 반복하도록 했다. 해당 작업에서는 tmp의 일의 자리수를 취한 다음에(%10 연산 후 변수 t에 저장) 그 수를 res 변수에 저장시켰다. 이후 tmp를 10 나누어 한 자리수 낮춘 다음 다시 일의 자리수를 취했다. 이는 기존 입력받은 정수의 십의 자리수로 이전보다 한 단계 더 높은 자리수의 정수이다. 이를 다시 res에 저장할 때는 기존 res에 10을 곱했는데 이 작업을 통해 입력받은 정수의 일의 자리수를 마지막 자리수로 바꾸게 함으로써 정수 뒤집기를 가능하게 하는 것이다.

 

최종적으로 연산된 res를 입력받은 정수랑 비교한 값(true or false)을 반환시키면 된다.

 

 

참고자료

  • https://leetcode.com/problems/palindrome-number/