요즘에는 개발자들이 회사에 취업하기 위해서 사용한다는 리트코드 (leetcode) 사이트의 문제들을 풀어보고 있습니다. 이제 막 시작한 초보자라 힘든 점이 많아서 이렇게 글로 남겨서 복습하려고 합니다.
문제: Palindrome Number
등급: Easy
내용: 11, 151, 121, 1001 같은 대칭수인지를 확인하라.
<코드>
class Solution(object):
def isPalindrome(self, x):
if x == 0:
return True
if x < 0:
return False
x = str(x)
length = len(x)
if length <= 3:
return x[-1] == x[0]
half = length // 2
if length % 2:
return x[0:half-1][::-1] == x[-half+1::]
return x[0:half][::-1] == x[-half::]
# 7// 2= 3 [[0:3-1] == [3+1:length-1]]
# 8// 2 =4 0~7 [0:4] == [4:length-1]
<논리>
우선, x== 0이면 True, 음수의 경우는 모두 False이다 ('-' 때문에).
나는, x 정수를 string으로 바꿔서 길이를 확인해서 절반씩 갈라서 비교하는 방법을 선택했다.
length <= 3이면 첫번쨰와 마지막 숫자만 비교해서 확인하는 방법도 넣었다.
홀수일 경우:
(중간 수 직전까지의 string)을 reverse한 string을 중간 수 직후의 string을 비교하게 했다.
짝수일 경우:
(중간 수까지의 string)을 reverse한 string을 중간 수 후의 string을 비교하게 했다.
[코드에 마지막 comment example 참고]
꽤나 괜찮다고 생각했는데, 훨씬 간단한 방법이 있었다.
<두번째 코드>
class Solution(object):
def isPalindrome(self, x):
return False if x < 0 else x == int(str(x)[::-1])
x<0, 음수면 False고, 0또는 0 보다 크다면 전체 정수를 뒤집어서 원래 것과 비교하면 된다.
아..
<오류, 힘들었던 점>
내 원래 첫번쨰 코드로 적는데 계속 안 풀렸던 것이, string[0:2]를 하면 string의 index 0,1만 된다는 점... 왜 나는 2까지 나온다고 생각했을까.
<총평 외 comment>
Happy coding!
'코딩 공부' 카테고리의 다른 글
Leetcode 14. Longest Prefix (0) | 2022.02.09 |
---|---|
Leetcode: 13. Roman to Integer - Python (0) | 2022.02.08 |
Leetcode Climbing Stairs Python 풀이 (0) | 2022.02.05 |
Leetcode Pow(x,n) 파이썬 (0) | 2022.02.04 |
댓글