본문 바로가기
  •  오묘와 함께 살아가는 집사의 연구노트
코딩공부

LeetCode easy 9번 Palindrome Number 문제 C언어 풀이

by 오묘집사 2021. 12. 5.
728x90
반응형

안녕하세요 오묘집사입니다.

 

최근 이사하고, 인터넷 연결을 못해서 글을 쓰지 못했네요..

 

오늘은 앞 뒤가 똑같은 전화번호~ 가 아니라

앞뒤가 같은 숫자를 판별하는 코드문제입니다.

거꾸로 써도 똑같은 숫자를 말합니다.

 

예를들어 입력값 x 가 12321

일 경우 이는 true 이고,

1234 일 경우 false인 것이죠.

-121 은 121- 이라서 false라고 합니다.

 

조건은 아래와 같습니다.

Constraints:

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

이는 c로 어떻게 짤까요?

 

이 int형을 string으로 바꾸면 쉽게 풀수도 있지만, 만약 int형 그대로 푼다면 어떻게 풀어야 할까요?

 

더보기

bool isPalindrome(int x){
    int n = x;
    int r = 0;
    
    if (x<0 || ((x%10 == 0)&& x != 0))
        return false;
    else
        while(n>r){
            r=r*10 + n%10;
            n = n/10;           
        }
    
    return n == r || n == r/10;
}

풀이를 시작해보겠습니다.

 

코딩에서 보통 나눗셈을 /, % 두가지로 나타내죠.

/ 는 몫이 결과값이고, %는 나머지가 결과값입니다.

이를 이용해서 숫자를 뒤집을 수 있습니다.

x % 10 을 하면, 1의자리 숫자가 나오겠죠.

그리고 그에 10을 곱하면서, 원래 숫자는 /10을 해주는 일을 반복하면 결국

1234 가

4321로 바뀌게 됩니다.

 

근데 여기서 이렇게 하나하나 다 바꾸면 시간이 오래 걸리게 되죠.

실제로 우리는 절반을 놓고 확인하면 됩니다.

 

12와 43이 같냐 를 보면된다는 것이죠.

가운데에 숫자가 있다면, 이는 빼면 그만입니다.

 

그래서 위와 같은 코드가 나오게 되었습니다.

 

예를들어 12322 라는 숫자라고 치면,

n = 12

r = 223 이 되겠죠?

여기서 12와 223/10, 22는 같지 않으므로 조건문이 0이 되어 false 를 return 받게 됩니다.

만약 12321 이라면 12 = 12가 되어 true가 되겠죠.

 

감사합니다.

반응형

댓글