hahn

[LeetCode - C] 9. Palindrome Number 본문

코딩테스트 연습/LeetCode(C - Easy)

[LeetCode - C] 9. Palindrome Number

hahn 2022. 3. 22. 05:40
728x90
반응형
 

Palindrome Number - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

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.

 

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:

  • -231 <= x <= 231 - 1

 

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


Solution 1

 

숫자를 각 자릿수 별로 쪼개 배열로 저장한 뒤, 비교하는 방법

 

Follow up 때문에 itoa 사용 안 했으나 사실 다를 게 없는 것 같다.

bool    isPalindrome(int x)
{
    int *num_arr;
    int size;
    int num;
    int idx;
    
    size = 0;
    idx = 0;
    num = x;
    if (x < 0)
        return (false);
    while (num)
    {
        num /= 10;
        size++;
    }
    if (!x)
        return (true);
    num_arr = (int *)malloc(sizeof(int) * size);
    while (x)
    {
        num_arr[idx++] = x % 10;
        x /= 10;
    }
    idx = 0;
    while (idx < --size)
    {
        if(num_arr[idx++] != num_arr[size])
            return (false);
    }
    free(num_arr);
    return (true);
}

Solution 2

(leetcode 제공)

 

revertedNumber에 x의 1번째 자릿수부터 순서대로 넣는 방법

 

주의해야할 점은 자릿 수가 짝수냐 홀수에 따라 조건 판단이 조금 달라진다

 

예외처리 부분은 010과 같이 맨 앞 자릿수가 0인 경우는 존재할 수 없으니

 

x < 0과 같이 false 처리해줬음.

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;
        }
        return x == revertedNumber || x == revertedNumber/10;
    }
}

총평

 

처음에는 숫자를 리버스 하려 했으나 귀찮아서 itoa 사용하여 해결하려했다.

 

하지만 follow up을 보고 Solution 1과 같이 처리했다.

 

결론적으로 itoa를 이용해 해결하는 것과 동일한 방법이었다.

 

leetcode에서 제공한 코드는 내가 리버스 하려 했던 것보다

 

좀 더 나아간 방법으로 확실히 좋은 방법이다.

728x90
반응형