본문 바로가기

LeetCode

[LeetCode] - 9. Palindrome Number

LeetCode는 프로그래밍 문제를 풀며 코딩 실력을 향상할 수 있는 온라인 플랫폼입니다. 다양한 알고리즘 및 데이터 구조 문제를 제공하며, 면접 대비에 유용합니다. 해당 문제는, LeetCode Problems에서 볼 수 있는 난이도 '쉬움 (Easy)' 단계인 "Palindrome Number" 문제입니다.

--> https://leetcode.com/problems/palindrome-number/description/

 

문제 : 

Given an integer x, return true if x is a palindrome, and false otherwise.


Example 1 :

Input : x = 121

Output : true

Explanation : 121 reads as 121 from left to right and from right to left.

 

Example 2 :

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.

 

Example 3 :

Input : x = 10

Output : false

Explanation : Reads 01 from right to left. Therefore it is not a palindrome.

Constraints : $-2^{31} \leq x \leq 2^{31} - 1$

 

Follow up : Could you solve it without converting the integer to a string ?


이 문제는 정수 x가 주어졌을 때, x가 회문이면 true를 반환하고, 그렇지 않으면 false를 반환하라는 문제입니다.

 

저는 제일 첫 번째로 든 생각이 int를 string으로 변환시킨 후에 palindrome (회문) 인지 아닌 지 를 확인하는 코드를 떠올렸었는데, Follow-up에 쓰여있듯이, 이 방법을 제외한 방법을 구현하라고 해서 곰곰이 생각해 봤습니다.

그렇게 해서 얻은 방법이 이 코드입니다 : 

class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0) return false; 
        int original = x;
        int reversed = 0;

        while (x != 0) {
            int digit = x % 10;
            reversed = reversed * 10 + digit;
            x /= 10;
        }

        return original == reversed;
    }
}

 

우선, x가 음수 일때는, Example 2를 참고하면 알 수 있듯이, 회문이 될 수 없기 때문에 바로 false를 리턴합니다.

그리고 reversed라는 새로운 변수를 만들고 해당 변수가 x의 거울버전(?)을 저장할 수 있게끔 코드를 짜줍니다. 

마지막으로 reversed와 original (x)이 같은지 아닌 지를 확인하면 코드는 마무리됩니다.


추가적으로, 만약에 int를 string으로 바꿔서 할 수 있었으면 어땠을까요 ? 

class Solution {
    public boolean isPalindrome(int x) {
        // 음수는 회문이 될 수 없음
        if (x < 0) return false;
        
        // 정수를 문자열로 변환
        String str = Integer.toString(x);
        
        // 문자열을 뒤집기
        String reversedStr = new StringBuilder(str).reverse().toString();
        
        // 원래 문자열과 뒤집힌 문자열이 같은지 비교
        return str.equals(reversedStr);
    }
}

 

이렇게 초간단 코드를 짤 수 있습니다. 굳이 설명을 안 해도 바로 이해가 가지는 코드입니다. 

 


Runtime 결