[LeetCode/Python] 9. Palindrome Number

2024. 9. 17. 00:54·Algorithm/LeetCode

문제 링크: https://leetcode.com/problems/palindrome-number/?envType=study-plan-v2&envId=top-interview-150

 

숫자를 문자열로 바꿔서 풀면 아주 쉬운 문제다.

근데 문제 말미에 문자열로 안바꾸고 풀어보라는 챌린지가 있길래 시도했다가 처참히 실패했다..ㅠ

 

일단 인풋을 문자열로 바꾸지 않고 숫자 자체로 두고 푼 코드는 아래와 같다.

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 9:
            return False
        
        while x > 0:
            n = len(str(x))
            divisor = 10 **(n-1)

            left = x // divisor
            right = x % 10
            
            if left != right:
                return False
            
            x = (x % divisor) // 10
        
        if x == 0:
            return True
        else:
            return False

 

케이스는 대부분 통과하지만, 100021 처럼 중간에 0이 들어간 케이스는 제대로 판별이 어렵다.

왜냐하면 숫자로만 대칭을 판단하기 위해 x를 업데이트해주는데 이 때, 0이 앞자리에 있을 경우는 숫자 처리를 하면서 0이 사라지기 때문이다 ㅠㅠ

뭔가 0이 중간에 들어갔을 때 숫자를 유지하면서 예외처리를 해줄 방법이 아무리 생각해도 떠오르지 않아서 그냥 포기하고 문자열로 문제를 풀었다..

 

[내 풀이]

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0:
            return False
            
        x_string = str(x)
        return int(x) == int(x_string[::-1])

문자열로 바꾸면 쏘 이지....ㅎㅎ

파이썬은 진짜 문자열 문제 푸는데는 탑 언어다...

 

 

[다른 풀이]

숫자로만 푼 천재 사람들의 풀이....

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x<0:
            return False

        inputNum = x
        newNum = 0
        while x>0:
            newNum = newNum * 10 + x%10
            x = x//10
        return newNum == inputNum

 

x의 palindrome 숫자를 newNum으로 직접 만드는 것이다. 이렇게 되면 0이 들어가 있든 없은 palindrome 여부를 판단할 수 있다!

 

x의 일의 자리 숫자들을 newNum으로 넣어주고, 해당 숫자를 이제 x에서 제외시킨다. (몫만 남긴다)

그렇게 된다면 원래 x의 10의 자리 숫자가 그 다음 일의 자리 숫자가 된다.

원래 newNum에 있었던 숫자는 다음 자릿수로 올라가야하므로 10을 곱하는 것이다.

 

이 반복문은 x의 숫자가 없어질 때까지, 즉 x가 0이 될 때까지 반복한다.

 

시간 복잡도

n은 x를 문자열로 바꾸었을 때 길이

=> O(n)

 

 

list[::-1]는 리스트나 문자열을 새롭게 생성하여 각 원소를 뒤집은 순서로 복사한다.

리스트의 각 요소를 새 리스트에 복사해야 하므로 리스트의 길이만큼 연산이 필요! 따라서 시간 복잡도는 O(n)

 

'Algorithm > LeetCode' 카테고리의 다른 글

[LeetCode/Python] 125. Valid Palindrome  (0) 2025.04.01
[LeetCode/Python] 58. Length of Last Word  (0) 2025.03.28
[LeetCode/Python] 67. Add Binary  (0) 2024.09.16
[LeetCode/Python] 13. Roman to Integer  (0) 2024.08.12
[LeetCode/Python] 1492. The kth Factor of n  (0) 2024.07.23
'Algorithm/LeetCode' 카테고리의 다른 글
  • [LeetCode/Python] 125. Valid Palindrome
  • [LeetCode/Python] 58. Length of Last Word
  • [LeetCode/Python] 67. Add Binary
  • [LeetCode/Python] 13. Roman to Integer
빵빵0
빵빵0
(아직은) 공부하고 정리하는 블로그입니다.
  • 빵빵0
    Hack Your World
    빵빵0
  • 전체
    오늘
    어제
    • 분류 전체보기 (97)
      • Error Handling (7)
      • Project (5)
        • MEV (2)
      • Architecture (0)
        • API (0)
        • Cache (0)
        • 사소한 고민거리 (0)
      • Computer Science (4)
        • Data Structure (2)
        • Database (1)
        • Cloud (0)
        • OS (0)
        • Infra, Network (1)
        • AI (0)
      • Language (12)
        • Go (11)
        • Rust (0)
        • Move (1)
        • Python (0)
        • Java (0)
      • Algorithm (40)
        • BaekJoon (18)
        • Programmers (7)
        • LeetCode (6)
        • NeetCode (9)
      • SW Books (9)
        • gRPC Up & Running (1)
        • System Design Interview (2)
        • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (6)
        • 블록체인 해설서 (0)
        • 후니의 쉽게 쓴 CISCO 네트워킹 (0)
      • BlockChain (5)
        • Research (1)
        • Meetup (4)
        • Tech (0)
      • Own (8)
        • TIR(Today I Read) (3)
        • Personal (2)
        • Novel (0)
        • Memo (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DP
    MongoDB
    큐
    Hash Table
    프로그래머스
    BEAKJOON
    EVM
    LeetCode
    ethereum
    Greedy
    BFS
    goroutine
    go
    KBW
    candlechart
    context
    Programmers
    golang
    Python
    blockchain
    백준
    chart
    스택
    2024
    MEV
    NeetCode
    Palindrome
    two pointer
    블록체인
    BaekJoon
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
빵빵0
[LeetCode/Python] 9. Palindrome Number
상단으로

티스토리툴바