Q. reverse 함수에 정수인 숫자를 인자로 받습니다.
그 숫자를 뒤집어서 return해주세요.
# 예
x: 1234
return: 4321
#1차 (pass)
def reverse() :
if number >= 0 :
number = str(number)
number = number[::-1]
return int(number)
else :
number = 1- * number
number = str(number)
number = number[::-1]
return int(number) * -1
#2차 (fail)
def reverse2() :
return int(str(number)[::-1] * (number/abs(number))
#3차 (pass)
def reverse3() :
if number >=0 :
sign = 1
else :
sign = -1
return int(str(number)[::-1]) * sign
문제를 보자마자 김왼손 코딩에서 봤던 역순으로 인덱스 슬라이싱하는 방법이 떠올랐다. ^^
(TIL 6월24일에 적어놨음 ~ 😁 TIL 6월24일 )
인자로 들어오는 number가 양수라면 number을 string
으로 바꾼 후 역순으로 슬라이싱하면 끝나는 간단한 문제지만 number가 음수인 경우엔 -
를 포함해서 역순으로 슬라이싱되기 때문에 반환값이 '4321-'의 형태가 된다.
그래서 number가 (1) 0보다 크거나 같을 때 , (2) 0보다 작을 때 로 조건을 나누어 if
문을 작성했다.
number가 0보다 작을 때는 number에 -1
을 곱해서 0보다 크게 만든 후 인덱스 슬라이싱한 뒤 다시 -1
을 곱해주는 방법을 선택했다.
if
문에 중복되는 내용이 많아서 간단하게 정리해보기로 했다. number가 0보다 작을 때 -1
을 곱하는 과정을 절대값을 사용해 number/abs(number)
의 형태로 작성했다. 간결한 코드 작성이 가능하지만 number가 0일 때는 절대값을 사용할 수 없어서 다시 number가 0일 때와 0이 아닐 때를 나누어 코드를 작성해야한다는 사실을 알았다.
1차에서 if
문에 중복된 내용을 return 뒤로 정리했다.
number가 0보다 크거나 같을 때는 1
을 곱하는 과정을 추가해서 return에 동일하게 같은 변수인sign
을 곱할 수 있도록 수정했다.
일단 코드를 작성한 뒤에 코드를 분석하고 정리하는 순서만 지키면 효율적으로 알고리즘을 완성시킬 수 있다. if
문은 맨 처음 조건만 다르고 그 다음 로직은 동일한 경우가 많기때문에, 조건에 따라 다른 코드만 골라내서 if
문에 작성, 이후의 중복되는 부분은 동일한 로직으로 정리한 뒤 한번만 작성할 수 있도록 간결하게 정리한다.