CK week1 day2

BnDC·2021년 9월 14일
0

code Kata

목록 보기
2/22

🎈 문제

정수인 숫자를 인자로 받아 그 숫자를 뒤집어 반환 하는 reverse 함수를
만들어라.

ex1)
x:1234 return 4321

ex2)
x:-1234 retunr -4321

ex3)
x:1230 retunr 321






🎯 내 풀이


def reverse(number):

  # step1
  abs_num=abs(number)
  n=int(0)
  result=int(0)
  
  while abs_num:
    abs_num//=10
    n+=1
    
    
    
  #step2
  abs_num = abs(number)  
  for i in range(n):
    result+=(abs_num%10)*(10**(n-i-1))
    abs_num//=10
    
    
    
  #step3
  if number > 0:
    return result
  else:
    return result*(-1)



📍 step1

  abs_num=abs(number) # 받은 숫자를 절대값으로 변환한 수 abs_num
  n=int(0) # 자릿수를 저장할 n
  result=int(0) #결과를 반환할 result
  
  while abs_num:
    abs_num//=10
    n+=1
  # abs_num을 10으로 나누어 0이 될 때까지, 
  # 10으로 나눈 횟수를 자릿수n으로 한다.

어떤 수 xxmm의 자리수일 때,
x=a10m1+b10m2+...+e100x = a10^{m-1}+b10^{m-2}+...+e*10^0 임으로
xx1010으로 mm번 나누어야 00이 된다.

ex)
x=1234=1×103+2×102+3×101+4×100x=1234=1\times10^3+2\times10^2+3\times10^1+4\times10^0
x1=x/10=1×102+2×101+3×100x_1=x/10=1\times10^2+2\times10^1+3\times10^0
x2=x/10=1×101+2×100x_2=x/10=1\times10^1+2\times10^0
x3=x/10=1×100x_3=x/10=1\times10^0
x4=x/10=0x_4=x/10=0



📍 step2

  abs_num = abs(number)  
  for i in range(n):
    result += (abs_num%10)*(10**(n-i-1))
    abs_num//=10
    

ii00 ~ nn까지for문을 돌면서
10i10^i번째 자리 숫자를 10ni110^{n-i-1}자리 숫자로 바꾸어
result에 저장한다.

ii12...n2n-2n1n-1
ni1n-i-1n1n-1n2n-2...100

123456
ii012345
ni1n-i-1543210



📍 step3

if number > 0:
    return result
  else:
    return result*(-1)

편의를 위해 result를 양수로 가정하고 만들고 진행하였는데,
최종적으로 number의 부호에 따라
number가 양수면, result를 그냥 반환하고,
number가 음수면, result를 음수로 만들어 주고 반환한다.

profile
“Life is C (Choice) between B (Birth) and D (Death).” - 인생은 B와 D사이의 C

0개의 댓글