[Codekata] Week1 - Day4

Jungmin Seo·2021년 6월 24일
0

Codekata

목록 보기
4/10

🍔 문제

숫자인 num을 인자로 넘겨주면, 뒤집은 모양이 num과 똑같은지 여부를 반환해주세요.

num: 숫자
return: true or false (뒤집은 모양이 num와 똑같은지 여부)

예를 들어,

num = 123
return false 
=> 뒤집은 모양이 321 이기 때문
num = 1221
return true 
=> 뒤집은 모양이 1221 이기 때문
num = -121
return false 
=> 뒤집은 모양이 121- 이기 때문
num = 10
return false 
=> 뒤집은 모양이 01 이기 때문

🍟 풀이

#1 나의 풀이

1-1

def same_reverse(num):
  if num > 0:
    num_str = str(num)[::-1]
    return num == int(num_str)
  else:
    return False

1-2

def same_reverse(num):
  num_rev = str(abs(num))[::-1]
  return str(num) == num_rev

#2

생각 못했던 또 다른 풀이 방법. num의 반만 체크하는 방법.

def same_reverse(num):
  # 음수여서 -가 붙어있거나, 0으로 끝나거나(10으로 나누어떨어지거나)
  if num < 0 or num % 10 == 0:
    return False

  front = num
  back = 0

  # back의 자리수가 front의 자리수를 넘지 않을 때까지 (반만 보기)
  while front > back:
    front, mod = divmod(front, 10)
    back = back*10 + mod

  # (num의 자리수가 짝수일 때)front와 back이 같거나, 
  # (num의 자리수가 홀수일 때)back의 마지막 숫자(num의 가운데 숫자)를 뺀 것과 front가 같을 때
  if front == back or back//10 == front:
    return True

  return False

코드가 무조건 짧은게 좋은걸까.
똑똑한 파이썬은 코드 라인 수를 줄여주지만, 과연 처리시간까지 줄여줄까.

profile
Hello World!

0개의 댓글