본문으로 바로가기

Palindrome Numbers의 규칙에 맞게 

앞으로 읽어도 뒤로 읽어도 같은 숫자가 되는 경우인지 판단하는 프로그램을 짜시오

(주어진 숫자를 string으로 변경 없이 풀어봅시다)

LeetCode에서 푼 문제 리스트 보기

LeetCode에서 문제 보기

githhub에서 코드 보기

문제 풀이

문제를 풀고 나니 숫자를 string으로 변경 없이 풀어보라는 걸 알았다. string으로 변경해서 푼 코드와 풀이 방법을 올려두고 내일 다시 풀어봐야겠다. 

방법 1. 숫자를 string으로 변경해서 문제를 푼다.

먼저 숫자의 길이가 짝수인지 홀수인지 판단하여 boolean 값을 저장해두자. 마치 거울로 비춘 숫자처럼 정 가운데에서부터 양 끝으로 이어지는 숫자가 차례대로 같은 수를 Palindrome이라고 한다. Palindrome의 규칙에 따라서 숫자의 길이가 홀수라면 가장 가운데 위치한 숫자는 반복되지 않는다.

(ex) 12321    # 3은 반복되지 않는다.

이 사실을 이용하여, 숫자의 길이가 짝수이면 mid_index(총 길이 // 2) 부터 반대편에 위치한 수의 index와의 합은 총길이 -1 이 되는 값이다. 만약 홀수라면 mid_index(총길이 // 2)의 다음 수부터 양쪽의 값이 같은지 확인하면 된다. 

파이썬 코드 - string으로 변환해서 풀었을 때

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
32
33
34
35
36
class Solution:
    def isPalindrome(self, x: int-> bool:
        """
        Runtime : faster tan 98.15% of Python3
        Memory Usage : less than 5.03% of Python3
        """
        number = str(x)
        length = len(number)
        is_even = False
 
        # 길이가 0
        if length == 0:
            return True
 
        # 음수
        if x < 0:
            return False
 
        # 짝수 여부
        if length % 2 == 0:
            is_even = True
 
        # 중간 index
        mid = length // 2
 
        # x의 길이가 짝수 일 경우만 양쪽을 확인
        last_index = length - 1
        for i in range(mid, length):
            if not is_even:
                is_even = True
                continue
 
            opposition = last_index - i
            if number[opposition] != number[i]:
                return False
        return True
cs