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문에 작성, 이후의 중복되는 부분은 동일한 로직으로 정리한 뒤 한번만 작성할 수 있도록 간결하게 정리한다.