Skip to content

Latest commit

 

History

History
111 lines (81 loc) · 3.44 KB

2021-02-14-2.md

File metadata and controls

111 lines (81 loc) · 3.44 KB

문제

풀이

  • 들어온 숫자가 회문(Palindrome)인지 확인하는 문제
  • 기존 문제들과 아주 조금 다른 점은 문자열이 아니라 정수!
  • 기존 문자열 회문 문제는 풀어서 블로그에 정리 했었다.(https://twpower.github.io/110-determine-if-string-is-palindrome)
  • 문자열로 변환하고 위에 링크에 나온대로 하면 쉽게 풀 수 있다.
  • 검색을 하다보니 문자열로 변환하지 않고 할 수 있는 방법이 있어서 그 방법으로 풀었다.(역시 세상은 넓고 배울게 많다.)
  • 생각해보면 10으로 나눈 나머지와 가장 앞에 자릿수만 구해서 비교하고 양끝읕 자르면 된다.
  • 그러면 일의 자리는 구하기 쉬운데 가장 앞에 자릿수는?!
  • Divisor를 10부터 들어온 숫자를 Divisor로 계속 나누면서 일의 자리가 될때까지 10을 곱하면서 Divisor를 구한다. 이러면 주어진 최고 자리 숫자가 10의 몇승인지를 알 수 있다!
  • 음수는 문제에서 안된다고 설명이 나와있다.

코드

class Solution:
    def isPalindrome(self, x: int) -> bool:
        s = str(x)
        return s == s[::-1]
func getDivisor(x int) int {

    divisor := 1
    for x / divisor >= 10 {
        divisor *= 10
    }
    return divisor
}

func isPalindrome(x int) bool {
      if x < 0 {
        return false
    }

    divisor := getDivisor(x)

    for x != 0 {

        front := x / divisor
        rear := x % 10

        if(front != rear){
            return false
        }


        x %= divisor
        divisor /= 100
        x /= 10
    }

    return true  
}
def get_divisor(n):
    divisor = 1
    while n / divisor >= 10:
        divisor *= 10
    return divisor

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

        while x != 0:
            front = x // divisor
            rear = x % 10

            if front != rear:
                return False

            x %= divisor
            divisor /= 100
            x //= 10
        return True

반성

  • 문자열로만 간단하게 처리하려 했다.
  • 다양한 방법이 있을 수 있다.
  • 양 끝을 자를때 계산 실수가 있었다. 일의 자리수를 없애는건 10으로 나눈 몫을 가져와야하는데 나머지를 가져오는 실수를 했다.

기타

  • 없음

참고자료