Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

귤귤나무 일지

LeetCode - 9. Palindrome Number 본문

Programming/Coding Problems

LeetCode - 9. Palindrome Number

귤귤나무 2024. 11. 10. 22:47
class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0 || x % 10 == 0 && x != 0) {
            return false;
        }

        int revertedNumber = 0;
        while (x > revertedNumber) {
            revertedNumber = revertedNumber * 10 + x % 10;
            x /= 10;
        }
        if (x == revertedNumber || x == revertedNumber / 10)
            return true;
        return false;
    }
};

Palindrome Number: 숫자를 거꾸로 읽어도 똑같은 숫자

처음에는 to_string을 사용하여 string으로 만든 후, 뒤집어서 둘이 같은지 검사.

하지만 이렇게 하면 시간이 오래 걸림.

 

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

 

결국, 또 해답을 봤다..

기존에 있는 숫자 x를 1의자리수부터 새로운 변수에 append한다.

예를 들어 12321의 경우,

1) x = 12321, y = 0

2) x = 1232, y = 1

3) x = 123, y = 12

4) x = 12, y = 123

 

이런 식으로 x가 y보다 작아질 때까지 수행한다.

그리고 x == y(x의 길이가 짝수) 또는 x == y/10(x의 길이가 홀수)일 때 true를 반환하도록 하였다.

 

또한, 문제에 있는 constraint인, x가 음수일 때, 또는 x가 0으로 끝나면서 0이 아닐 때(ex. 10, 320)는 바로 false를 반환하도록 했다.

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0 || (x != 0 && x % 10 == 0)) {
            return false;
        }

        int reversed = 0;
        while (x > reversed) {
            reversed = reversed * 10 + x % 10;
            x /= 10;
        }
        return (x == reversed) || (x == reversed / 10);
    }
};

Key Idea

string을 사용하지 않고 풀기. x의 1의자릿수부터 값을 append.