codekata #2 (week 1) Reverse Integer

Junyoung Kim·2022년 1월 16일
0

algorithm

목록 보기
2/12

Leetcode #7 Reverse Integer

문제

reverse 함수에 정수인 숫자를 인자로 받습니다.

그 숫자를 뒤집어서 return해주세요.

x: 숫자

return: 뒤집어진 숫자를 반환!

예들 들어,

x: 1234
return: 4321
x: -1234
return: -4321
x: 1230
return: 321

나의 풀이

def reverse(number):
  x = list(str(number))
  y = ''.join((x[::-1]))

   if number < 0:
     return -int(y[:len(y)-1])
   else:
     return int(y)
  • 숫자형 자료인 numberstr()함수를 통해 문자형으로 바꾼 후 list() 함수를 통해 리스트에 저장
  • 순서를 거꾸로 하여([::-1] 리스트 슬라이싱 스텝 사용) 문자열끼리 합침
  • 만약 number가 음수일경우, 마이너스 기호 -가 맨 뒤에 있어서 올바른 반환이 되지 않음
  • 슬라이싱을 다시 이용해 마지막 인덱스를 제외한 값을 int() 함수를 이용해 숫자로 만든 뒤 음수를 붙여 반환
  • 양수일경우 int() 함수를 이용한 값을 반환

다른 풀이

숫자형, 문자형, 리스트의 형변환 함수를 사용하면 쉽게 풀리는 문제였지만, 오로지 숫자만을 이용하여 푸는 방법도 생각해 보았다.(사실 처음에는 이 방법을 생각했었다.)
로직은 다음과 같다.

  • 입력받은 number의 각 자릿수의 몫만 추출하여(10n10^n으로 나눔)
  • 역으로 10n110^{n-1}씩 곱하여 더한다
  • 만약 number가 음수일 경우에는, 나눗셈을 통해 추출한 몫의 값이 달라진다.
  • 따라서 number를 양수로 만들고, 코드 실행 후 나온 결과값의 음수/양수를 정하는 상수를 선언한 다음 반환할 때 곱해준다.

다른 풀이 코드

def reverse(number):
  minus = 1
  result = 0
  if number < 0: #number가 음수일 경우를 위한 if문
     number *= -1
     minus = -1
    
  for _ in range(len(str(number))): #number의 자릿수+1만큼 실행(ex) number == 4321 -> 3번 반복)
        result += (number % 10) # result의 number의 1의 자리를 더함 (number == 4321, result == 1)
        result *= 10 		# 10을 곱함 (result == 10)
        number = number // 10 	# number를 10으로 나눈 몫으로 변환 number == 432
  
  result //= 10
  
  # for문 2번째 루프시 result == 120 , number  == 43
  # for문 3번째 루프시 result == 1230 , number == 4
  # for문 4번째 루프시 result == 12340 -> 10으로 나눈 몫이 result

  return minus * result

0개의 댓글

관련 채용 정보