이 문제의 저작권은 매일프로그래밍(https://mailprogramming.com/)에 있습니다.
- 매일프로그래밍 - Question 4
- 정수(int)가 주어지면, 팰린드롬(palindrome)인지 알아내시오. 팰린드롬이란, 앞에서부터 읽으나 뒤에서부터 읽으나 같은 단어를 말합니다. 단, 정수를 문자열로 바꾸면 안됩니다.
- while문을 이용해서 제일 앞과 뒤를 가운데로 이동하면서 서로 비교하는 방법을 이용
# 문제 조건에서 음수는 palindrome이 될 수 없다고 함 이미
def is_palindrome(n):
# 엣지케이스부터 제거하자
# 음수일 경우
if n<0: return False
# 0으로 끝나도 안된다.
if n>=10 and n//10 == 0: return False
# 최고 차수 찾기
left = 1
while n//left != 0:
left *= 10
left = left//10
while n > 0 :
left_num = n//left
right_num = n%10
#print("left_num : " + str(left_num) + " " + "right_num : " + str(right_num) + " " + "n : " + str(n))
if left_num != right_num:
return False
n = n - left_num*left
n = n // 10
left //= 100
return True
print(is_palindrome(12345))
print(is_palindrome(-101))
print(is_palindrome(1111))
print(is_palindrome(12321))
print(is_palindrome(0))
- 푸는 시간 : 21분
- 나눗셈을 할 때 몫의 경우에 파이썬의 경우에는 float을 반환 해주는데 이 부분에 대한 처리가 실수가 있어서 실수와 정수를 비교하는 실수를 했다.
- 몫을 구하는 연산과 나머지 연산에서 실수를 하였다.