Palindrome Numbers의 규칙에 맞게
앞으로 읽어도 뒤로 읽어도 같은 숫자가 되는 경우인지 판단하는 프로그램을 짜시오
(주어진 숫자를 string으로 변경 없이 풀어봅시다)
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 |
'온라인 코딩 테스트 문제 풀이 > LeetCode 문제 풀이' 카테고리의 다른 글
Python으로 푸는 LeetCode 26. Remove Duplicates from Sorted Array (Easy) (0) | 2019.04.03 |
---|---|
Python으로 푸는 LeetCode 13. Roman to Integer (Easy) (0) | 2019.04.02 |
Python으로 푸는 LeetCode 7. Reverse Integer (Easy) (0) | 2019.03.30 |
Python으로 푸는 LeetCode 3. Longest Substring Without Repeating Characters (Medium) (0) | 2019.03.28 |