知之者 不如好之者, 好之者 不如樂之者

기계처럼 살지 말고, 즐기는 인간이 되자

Code/LeetCode

[LeetCode] 9.Palindrome Number (Easy/Python3)

코방코 2022. 8. 30. 06:39
728x90

LeetCode 문제 링크이다.

 

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

 

문제를 요약하면,

좌우 대칭인 수, 즉 거꾸로 해도 똑같은 수를 True

그 이외는 False로 출력하면 된다.

ex) 121 → True / 123 → False / -121 → False (-도 포함) 

 

나는 Python으로 해결했다.

class Solution:
    def isPalindrome(self, x: int) -> bool:
        check=str(x)
        i=0
        for i in range(len(check)//2):
            if not check[i]==check[len(check)-1-i]:
                return 0
                break
            else:
                i+=1
                continue
        if i==len(check)//2:
            return 1

코드를 설명하면, 

3행 check=str(x) : int 타입의 x를 str로 변환하여 check에 할당

이는 굳이 필요한 과정은 아니다. 나는 혹시나 int가 -부호가 있으면 Index 오류가 날까 봐 바꾸었는데,

check 대신 x로 넣어도 잘 작동하는 것을 확인했다. 아무 문제 없다.

 

4행 i=0 : 추후 i로 True 판별하기 위한 선언

 

5행~11행 for 문 : 숫자 길이를 2로 나눈 몫만큼 for문을 반복하여, 맨 앞자리와 맨 뒷자리 확인

같지 않다면 그 즉시 0(False)을 리턴, for문 탈출 (더 이상 뒤를 확인할 필요가 없음)

그 이외에는 한 칸씩 움직여오며(두 번째 자리, 뒤에서 두 번째 자리) for문 지속, i에 1씩 가산

수의 길이가 짝수일 때 : 123321 -  for문 3번

수의 길이가 홀수일 때 : 1234321 -  for문 3번, 가운데는 뭐가 오든 True/False와 관계없음

 

12행~13행 if i==len(check)//2 : for문을 break 당하지 않고 끝까지 돌면, 이는 좌우 대칭임

따라서 i==len(check)//2 일 때 좌우 대칭임 (10행에서 Loop 한 번 돌 때마다 i 가산)

조건 만족 시 return 1 (True)
            

 

시간 효율은 전체 제출 코드 중 97.02%(상위 2.98%), 공간 효율은 16.34% (상위 83.66%) 가 나왔다.

 

조금씩 익숙해지고 있는 듯하다.

대신 앞으로 주석을 조금씩 작성해야겠다.

 

728x90
반응형